如何将函数传递给访问对象范围内属性的对象?
这有效:
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之间有所不同吗?
答案 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中,只要你知道一个属性的名称,就没有什么是私有的。