我有一个C类,有两个方法,a和b,我希望其中一个(b(总是在另一个(a(之后调用
class C(Widget) :
def __init__(self) :
super(C, self).__init__()
self.bind(a=self.b) # something like this
def a(self) : pass
def b(self) : pass
如何?
从 a 调用 b 怎么样?
def a(self) :
#some code
self.b()
我不太记得为什么它不能通过绑定工作,但我认为它与使用不同的对象有关,例如绑定到未执行的旧方法或某种意义上的东西。
这就是super()
来救援的地方。你看,super()
不仅用于调用你继承的类__init__()
,它还具有其他目的。
我刚刚用<overridden method>()
替换了__init__()
:
from kivy.base import runTouchApp
from kivy.uix.button import Button
class MyBase(Button):
def overridden(self, *args):
self.stable()
def stable(self, *args):
print('stable')
class MyButton(MyBase):
def __init__(self, **kwargs):
super(MyButton, self).__init__(**kwargs)
self.bind(on_release=self.overridden)
def overridden(self, *args):
# run before overriden stuff
super(MyButton, self).overridden()
print('new overridden')
# run after overridden stuff
super(MyButton, self).overridden()
runTouchApp(MyButton())