亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您可以對內置類進行猴子修補嗎?如果不能,我如何重載運算符來定義兩個不同類的加法?

您可以對內置類進行猴子修補嗎?如果不能,我如何重載運算符來定義兩個不同類的加法?

慕萊塢森 2023-08-22 18:25:28
首先,這不是一個如何獲得特定結果的問題,而是一個關于 Python 內部工作原理的問題。我對編程還很陌生,所以請告訴我是否使用了任何錯誤的術語。我的假設圍繞著一個相當基本的錯誤。我嘗試運行:"My age is " + 46顯然,這會出現“無法將 'int' 對象隱式轉換為 str”錯誤。沒有將字符串添加到整數的定義,但我可以創建一個嗎?我的第一個問題是這對于字符串和整數等內置類是否可行。我環顧四周,并不認為是這樣,但如果有人知道一種方法,我會很感興趣。我的第二個問題是,如果我定義兩個新類,它們在各方面都表現得像字符串和整數,但不是內置的,我可以定義這兩個類的加法嗎?我知道我可以定義同一個類的添加,但是兩個不同的類呢?最后,加法(無論是直接字符串和整數還是字符串和整數這樣的兩個類)應該通過在相加之前將整數轉換為字符串來生成:“我的年齡是 46”。提前致謝!
查看完整描述

2 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

至于你的第一個問題:改變內置類基本上是不可能的。雖然你可能會干擾其他類,但這通常是一個糟糕的主意。相反,您可以創建一個具有所需屬性的子類。


例如:


class mystr(str):

    def __add__(self, other):

       return mystr(str(self) + str(other))

此代碼繼承了該類的所有屬性str,除了我們要更改的屬性(即其添加行為)。通過強制轉換self,str我們仍然委托 tostr的添加,但我們還將其他參數強制轉換為str以獲得您所描述的行為。


最后,我們返回到,mystr這樣我們就不會得到str.


現在我們可以執行以下操作:


>>> some_string = mystr("abc")

>>> some_string + 4

"abc4"


查看完整回答
反對 回復 2023-08-22
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

你可以這樣做:


class stringclass:

    def __init__(self, mystring):

        stringclass.mystring = mystring

    def add(self, number):

        stringclass.mystring = stringclass.mystring + repr(number)

然后:


myobject = stringclass("My age is ")

“添加”號碼:


myobject.add(46)

然后檢查對象:


print(myobject.mystring)

這會給你:


My age is 46

(不過,我根本不知道這有什么用處。)


查看完整回答
反對 回復 2023-08-22
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號