第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在__add__運(yùn)算符中返回相同子類(lèi)的對(duì)象

在__add__運(yùn)算符中返回相同子類(lèi)的對(duì)象

人到中年有點(diǎn)甜 2021-03-19 09:33:34
我正在為自己的解釋器開(kāi)發(fā)一個(gè)簡(jiǎn)單的類(lèi)型系統(tǒng)。我正在寫(xiě)這樣的東西:class Base(object):    def __init__(self, content):        self.__content = content    @property    def content(self):        return self.__content    @content.setter    def content(self, value):        self.__content = valueclass Number(Base):    def __init__(self, content):        super(Number, self).__init__(content)    def __add__(self, other):        return Number(self.content + other.content)    ...and so onclass Float(Number):    def __init__(self, content):        super(Float, self).__init__(content)class Integer(Number):    def __init__(self, content):        super(Integer, self).__init__(content)我的問(wèn)題是,如果我做這樣的事情,顯然:if __name__ == '__main__':    f1 = Float(3.5)    f2 = Float(2.3)    f3 = f1 + f2    type(f3)我已經(jīng)將f1和f2相加,它們是Float類(lèi)型,但是我已經(jīng)獲得了f3,這是Number類(lèi)型,但是我希望f3是Float類(lèi)型。如何僅在我的Number超類(lèi)中一次定義我的add運(yùn)算符,以返回與f1和f2相同的類(lèi)型?我有使用isinstance嗎?有沒(méi)有更清潔的方法可以做到這一點(diǎn)?
查看完整描述

2 回答

?
三國(guó)紛爭(zhēng)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊

您可以使用__class__:


def __add__(self, other):

    return self.__class__(self.content + other.content)

正如@Eric指出的那樣,您可能想要做類(lèi)似的事情


if self.__class__ == other.__class__:

    <use __class__>

else:

    <use Number>

以確??深A(yù)測(cè)的行為(如果類(lèi)不匹配,則采取其他措施)。


__radd__ 在這里也值得覆蓋:


__radd__ = __add__

這將使 Number(1) + Float(1) == Float(1) + Number(1) == Float(2)


查看完整回答
反對(duì) 回復(fù) 2021-03-26
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

我認(rèn)為您想要{(1, 0): self.__class__, (0, 1): other.__class__}.get((issubclass(self.__class__, other.__class__), issubclass(other.__class__, self.__class__)), Number)。如果我不必在評(píng)論中加上它,那將不太那么鈍。

查看完整回答
反對(duì) 回復(fù) 2021-03-26
  • 2 回答
  • 0 關(guān)注
  • 211 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)