Python函数参考对象属性

时间:2017-07-21 18:53:03

标签: python

如何将函数传递给访问对象范围内属性的对象?

这有效:

class Foo():
    def __init__(self, some_func):
        self.some_func = some_func
        self.stats = 'some stats'
    def execute(self):
        return self.some_func()
def bar():
    return x.stats      
x = Foo(bar)
x.execute()

但我不喜欢如果我重命名该对象,我必须写一个新的bar

我真正想写的更像是:

class Foo():
    def __init__(self, some_func):
        self.some_func = some_func
        self.stats = 'some stats'
    def execute(self):
        return self.some_func()
def bar():
    return self.stats      
x = Foo(bar)
x.execute()

并让self中的bar()从其传递给的任何Foo对象中获取统计信息,无论其名称如何。我无法找到一种聪明的方法来做到这一点。

有没有很好的方法来引用Foo对象的属性而不改变Foo?或者,您可以通过让Foo调用some_func()更智能来启用此功能吗?这在python 2和3之间有所不同吗?

1 个答案:

答案 0 :(得分:4)

为什么不能在运行时传入对象?

class Foo():
    def __init__(self, some_func):
        self.some_func = some_func
        self.stats = 'some stats'
    def execute(self):
        return self.some_func(self)

def bar(self_):
    return self_.stats      

x = Foo(bar)
x.execute()

上面的函数bar()有效,因为在python中,只要你知道一个属性的名称,就没有什么是私有的。