python 传递给 class 函数的上下文
python context of passed-to-class function
在我的模型中,我有一个 class
包含一个相当通用的函数,它调用一个高阶函数。我整理了一个简单的例子:
class AClass(object):
def __init__(self, prop, fun):
self.prop = prop
self.fun = fun
def do_sth(self):
self.fun()
def namely_this_(context):
print 2*context.prop
obj1 = AClass(3, namely_this_)
obj1.do_sth()
此代码段包含所有要知道的内容,请注意,它可以通过以下内容继续:
def namely_this_2(self):
print 4*self.prop
obj2 = AClass(2, namely_this_2)
obj2.do_sth()
上面的代码没有运行,而是抛出一个
TypeError: namely_this_() takes exactly 1 argument (0 given)
相反,我必须将 do_sth
更改为
def do_sth(self):
self.fun(self) # the *self* in the parenthesis added
问题:namely_this_
与 class 中定义的函数有何不同?我的变通方法是否可行?
实例方法是 class 的 属性,而不是实例本身。如果您将 init 更改为将 fun
分配给 self.__class__.fun
,它将起作用;当然,除此之外,所有实例都将共享相同的功能,这显然不是您想要的。
为了让它成为一个实际的方法,你需要让它成为 types.MethodType
:
的一个实例
def __init__(self, prop, fun):
self.prop = prop
self.fun = types.MethodType(fun, self)
在我的模型中,我有一个 class
包含一个相当通用的函数,它调用一个高阶函数。我整理了一个简单的例子:
class AClass(object):
def __init__(self, prop, fun):
self.prop = prop
self.fun = fun
def do_sth(self):
self.fun()
def namely_this_(context):
print 2*context.prop
obj1 = AClass(3, namely_this_)
obj1.do_sth()
此代码段包含所有要知道的内容,请注意,它可以通过以下内容继续:
def namely_this_2(self):
print 4*self.prop
obj2 = AClass(2, namely_this_2)
obj2.do_sth()
上面的代码没有运行,而是抛出一个
TypeError: namely_this_() takes exactly 1 argument (0 given)
相反,我必须将 do_sth
更改为
def do_sth(self):
self.fun(self) # the *self* in the parenthesis added
问题:namely_this_
与 class 中定义的函数有何不同?我的变通方法是否可行?
实例方法是 class 的 属性,而不是实例本身。如果您将 init 更改为将 fun
分配给 self.__class__.fun
,它将起作用;当然,除此之外,所有实例都将共享相同的功能,这显然不是您想要的。
为了让它成为一个实际的方法,你需要让它成为 types.MethodType
:
def __init__(self, prop, fun):
self.prop = prop
self.fun = types.MethodType(fun, self)