直接將函式繫結到原有的方法上,函式的第乙個引數依然是例項self,修改後的方法不僅會作用於新建立的例項,也會作用於修改前建立的例項。
class
student
:def
__init__
(self, name)
: self.name = name
defself_introduce
(self)
:print
(f'i am .'
)def
new_self_introduce
(self)
:print
(f'my name is . nice to meet you!'
)a = student(
'xiaoming'
)a.self_introduce(
)student.self_introduce = new_self_introduce
a.self_introduce(
)b = student(
'xiaohong'
)b.self_introduce(
)
輸出:
i am xiaoming.若採用與上述相同的方式繫結my name is xiaoming. nice to meet you!
my name is xiaohong. nice to meet you!
a.self_introduce = new_self_introduce
a.self_introduce(
)
則會出現錯誤
traceback (most recent call last):可見例項物件並沒有作為引數傳入新方法的self中,所以這種方法只能繫結不需要self引數的靜態方法。這時可以用types中的methodtype函式來處理,引數為file 「c:/users/hmy/documents/git/doc/spiders/hmyspiders/script/test.py」, line 18, in
a.self_introduce()
typeerror: new_self_introduce() missing 1 required positional argument: 『self』
要繫結的新方法,例項
,只作用於當前例項
from types import methodtype
class
student
:def
__init__
(self, name)
: self.name = name
defself_introduce
(self)
:print
(f'i am .'
)def
new_self_introduce
(self)
:print
(f'my name is . nice to meet you!'
)a = student(
'xiaoming'
)a.self_introduce(
)a.self_introduce = methodtype(new_self_introduce, a)
a.self_introduce(
)b = student(
'xiaohong'
)b.self_introduce(
)
輸出:
i am xiaoming.my name is xiaoming. nice to meet you!
i am xiaohong.
PYTHON 動態建立類或修改父類的方法
近期對python 動態建立類或修改父類的方法進行了學習,總結記錄一下 def createclass cls class customizedclass cls return customizedclass classlist createclass list 此方法比較容易理解,向函式傳入父類即...
細說python類2 類動態新增方法和slots
先說一下類新增屬性方法和例項新增屬性和方法的區別,類新增屬性屬於加了乙個以類為全域性的屬性 據說叫靜態屬性 那麼以後類的每乙個例項化,都具有這個屬性。給類加乙個方法也如此,以後類的每乙個例項化都具備這個方法 但是據說叫動態方法。但是給例項加乙個屬性,作用域就是這個例項,是與類沒關係的 據說這種屬性叫...
動態呼叫類和方法
舉乙個很簡單的例子 某公司的有1000名員工,每個員工的工資都不一樣.發工資的時候,這要是人工去發,耗費的時間和精力是非常大的.所以財務會打乙個 給銀行,委託銀行轉賬.站在銀行的角度,如果有1000個公司,委託銀行轉賬發工資.它應該怎麼做呢?它需要通過電子轉賬系統,輸入公司名字,每個員工的工資數,就...