我在一个动态编程环境中工作,在那里我可能需要定义(或重新定义)一个类函数。比如说:
def func(self):
print("hello2 \n")
class ManClass:
def __init__(self):
pass
def func1(self):
print("hello1\n")
a = ManClass()
a.func1()
hello1
a.func2 = func
>>> a.func2()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: func() takes exactly 1 argument (0 given)
如果在类中定义了func2(),则func2()将被解释为ManClass.func2类(a) -但现在我把它分配到外面,它似乎期待着一个论点。我该如何解决这个问题,但更重要的是,为什么这两个定义在解释上存在差异?你知道吗
您没有将
func
添加到类中,而是将其添加到实例中。试试ManClass.func2 = func
。你知道吗a.func2 = func
将func
作为名为func2
的实例属性添加到类的a
实例中,而不是作为实例成员方法(这实际上只是对基础类对象上可调用成员的特殊处理)。你知道吗或者,您也可以使用
MethodType
将成员方法添加到单个实例中,正如@jornsharpe在他的回答中指出的那样。你知道吗这就是函数和绑定方法之间的区别,其中“绑定”是指实例
self
。要解决您的问题,您需要使独立函数MethodType
:这将
func
绑定到ManClass
实例a
,允许它访问任何实例属性。注意,这个只影响a
,其他ManClass
实例将保留原始的类定义,除非进行类似的修补。你知道吗当你简单地附加函数
您仍然可以访问它:
但是它没有得到隐式对象实例
self
参数,只是将其作为标准的位置参数。你知道吗相关问题 更多 >
编程相关推荐