【问题标题】:python context of passed-to-class function [duplicate]传递给类函数的python上下文
【发布时间】:2015-10-09 12:04:01
【问题描述】:

在我的模型中,我有一个 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()

这个 sn-p 包含所有要知道的内容,请注意,它可以通过以下方式继续:

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_ 与类中定义的函数有何不同?我的解决方法是可行的解决方案吗?

【问题讨论】:

    标签: python oop self


    【解决方案1】:

    实例方法是类的属性,而不是实例本身。如果您将初始化更改为将fun 分配给self.__class__.fun,它会起作用;当然,除此之外,所有实例都将共享相同的功能,这显然不是您想要的。

    为了让它成为一个实际的方法,你需要让它成为types.MethodType的实例:

    def __init__(self, prop, fun):
        self.prop = prop
        self.fun = types.MethodType(fun, self)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      相关资源
      最近更新 更多