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

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

向現有對象實例添加方法

向現有對象實例添加方法

哆啦的時光機 2019-06-01 16:01:49
向現有對象實例添加方法我已經讀到,可以在Python中向現有對象(即類定義中)添加一個方法。我知道這樣做并不總是好的。但如何才能做到這一點呢?
查看完整描述

3 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊


在Python中,函數和綁定方法是有區(qū)別的。


>>> def foo():

...     print "foo"

...

>>> class A:

...     def bar( self ):

...         print "bar"

...

>>> a = A()

>>> foo

<function foo at 0x00A98D70>

>>> a.bar

<bound method A.bar of <__main__.A instance at 0x00A9BC88>>

>>>

綁定方法已被“綁定”(如何描述性)到實例,每當調用該方法時,該實例將作為第一個參數傳遞。


不過,作為類的屬性(相對于實例)的可調用對象仍未綁定,因此您可以隨時修改類定義:


>>> def fooFighters( self ):

...     print "fooFighters"

...

>>> A.fooFighters = fooFighters

>>> a2 = A()

>>> a2.fooFighters

<bound method A.fooFighters of <__main__.A instance at 0x00A9BEB8>>

>>> a2.fooFighters()

fooFighters

以前定義的實例也會被更新(只要它們沒有重寫屬性本身):


>>> a.fooFighters()

fooFighters

當您想要將方法附加到單個實例時,問題就出現了:


>>> def barFighters( self ):

...     print "barFighters"

...

>>> a.barFighters = barFighters

>>> a.barFighters()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: barFighters() takes exactly 1 argument (0 given)

當函數直接附加到實例時,它不會自動綁定:


>>> a.barFighters

<function barFighters at 0x00A98EF0>

要綁定它,我們可以使用類型模塊中的方法類型函數:

>>> import types>>> a.barFighters = types.MethodType( barFighters, a )
>>> a.barFighters<bound method ?.barFighters of <__main__.A instance at 0x00A9BC88
>>>>> a.barFighters()barFighters

這一次,該類的其他實例沒有受到影響:

>>> a2.barFighters()Traceback (most recent call last):
  File "<stdin>", line 1, in <module>AttributeError: A instance has no attribute 'barFighters'

更多信息可通過閱讀描述符元類 編程.


查看完整回答
反對 回復 2019-06-01
  • 3 回答
  • 0 關注
  • 416 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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