python動態修改類方法和例項方法

2021-10-08 03:19:16 字數 1965 閱讀 3477

直接將函式繫結到原有的方法上,函式的第乙個引數依然是例項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):

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』

可見例項物件並沒有作為引數傳入新方法的self中,所以這種方法只能繫結不需要self引數的靜態方法。這時可以用types中的methodtype函式來處理,引數為要繫結的新方法,例項,只作用於當前例項

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個公司,委託銀行轉賬發工資.它應該怎麼做呢?它需要通過電子轉賬系統,輸入公司名字,每個員工的工資數,就...