我想装饰bar
和baz
,将它们注册到Container
,并在Foo
中收集回调。给定python修饰符,这可能吗?你知道吗
class Foo(object):
results = []
def __init__(self, app):
self.app = app
self.registerAll()
def registerAll(self):
self.results.append(self.app.myRegister(self.baz))
self.results.append(self.app.myRegister(self.bar))
def baz(self):
print("baz")
def bar(self):
print("bar")
class Container(object):
funcs = []
def start(self):
self.f = Foo(self)
def myRegister(self, f):
self.funcs.append(f)
print("myRegister")
def callback(res):
print('cb')
return callback
x = Container()
x.start()
您的问题看起来可疑地像一个XY Problem,因为不清楚您最终希望通过注册函数(实际上是类方法)来实现什么。(另请参见What is the XY problem?)不过,这里有一种方法可以做你想做的事情——假设我理解你到目前为止在你的问题中所做的。你知道吗
我做了
Container.myRegister()
一个classmethod
,因为它只引用它所在类的一个属性。我还在Foo
类之前定义了Container
类,以便装饰器可以引用前者。此外,我删除了registerAll()
方法,因为它不再需要了(但是这意味着类属性results
现在没有在任何地方被引用,所以可能也应该删除它……)。你知道吗相关问题 更多 >
编程相关推荐