簡體   English   中英

將成員 function 動態添加到 Python 中的 class 的實例

[英]Dynamically add member function to an instance of a class in Python

當我執行以下操作時:

class C:
 pass

def f( self ):
 print self

a = C()

a.f = f

a.f()

我在 af() 行收到以下錯誤:TypeError: f() 恰好采用 1 個參數(給定 0)

問題似乎是,當將 f 添加到實例 a 時,它被視為存儲在 a 內部的 function,而不是實際成員 function。 如果我將 af() 更改為 af(a),那么我得到了預期的效果,但是有沒有辦法讓 python 以這種方式解釋原始示例? 換句話說,有沒有辦法在運行時將成員 function 添加到 class 的實例?

謝謝

對於 Python 2.X,您可以使用:

import types
class C:
    pass

def f(self):
    print self

a = C()
a.f = types.MethodType(f,a)
a.f()

對於 Python 3.X:

import types
class C(object):
    pass

def f(self):
    print(self)

a = C()
a.f = types.MethodType(f,a)
a.f()

您應該將f放在 class 中,而不是在實例中...

 class C:
     pass

 def f(self):
    print(self)

 a = C()
 C.f = f
 a.f()

For the interpreter myObject.foo() is the same as myClass.foo(myObject) when the object doesn't hold anything named foo , but a function placed inside a object is just a function.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM