所以,我知道我可以毫无问题地做到这一点:
button = widget.libray.Button()
class X():
@button.on_click
def click(self, event):
...
没有问题。
...但这很烦人,因为现在“按钮”超出了课程范围;我希望这是一个类属性。如何为类成员使用 @blah 装饰语法?
我当然不能使用装饰器,像这样:
class UiDemo(cocos.cocosnode.CocosNode):
def on_enter(self):
self.b = Button(text='Hello World')
self.bt = b.event(self.bt) # <--- !!! Instead of decorator!
vbox = VBox(elements=[self.b])
self.dialog = Dialog(title='My Dialog', x=100, y=100, content=vbox, width=200, height=100)
cocos.director.director.window.push_handlers(self.dialog)
# @self.b.event doesn't work here, obviously.
def bt(self, button):
print('Button pressed: %s' % button)
def on_exit(self):
cocos.director.director.window.remove_handlers(self.dialog)
def draw(self):
self.dialog.on_draw()
class Client:
def run(self):
cocos.director.director.init()
test = UiDemo()
main_scene = cocos.scene.Scene(test)
cocos.director.director.run (main_scene)
我的意思是,我看到了问题;该方法是在定义类时在类上定义的(我猜),所以即使你在init () 步骤中创建了小部件,它在类定义被解析的时候也不存在,所以它可以'当时不能用作装饰者。
我想知道是否有某种解决方法?
当然,在很多情况下,您希望您的装饰器属性引用附加到该类的某物的实例?
(从我上面的例子可以看出,这不仅仅是“假设”的情况;这是本周我第二次使用冗长的 self.func = self.instance.dec(self.func)表格来做到这一点)
有什么建议么?
(......显然,除了使用不这样做的库,因为它很愚蠢;这不是真正的解决方案。:P)