想象一下以下结构(我已经切割了大部分imho相关部分):
class mymodificatorclass:
def callback(self,object):
print object
class generator(BoxLayout):
#(...)
def add(self, *l):
for i,t in enumerate(self.texts):
self.mytext.append(TextInput(hint_text=t, on_text_validate=modify.callback(self)))
self.add_widget(self.mytext[i])
#(...)
modify = mymodificatorclass() #global scope variable
在0x433eef0>处打印例如< main .generator对象。哪个好。 但是,如何访问此类实例变量?
意思是,期望的输出是:
print XXXXX
$ <__main__.mytext object at 0x433eef0>
print XXXXX.text, XXXXX
$ "text inside" <__main__.mytext object at 0x433eef0>
我查了一下:
print object.__class__.__dict__.items() #no mytext here
print object.mytext #no mytext here
print getattr(object,object.mytext) # object generator has no attribute mytext
我知道我可以分配例如存储每个TextInput对象的附加变量,但我宁愿不这样做,因为我知道如果我修改了这样的例子:
class generator(BoxLayout):
def add(self, *l):
for i,t in enumerate(self.texts):
self.mytext.append(TextInput(hint_text=t, on_text_validate=self.callback))
self.add_widget(self.mytext[i])
def callback(self,object):
print object
我会得到理想的结果(我有这样的,但我决定我需要靠近mvc)
答案 0 :(得分:1)
self.mytext.append(TextInput(hint_text=t,
on_text_validate=modify.callback(self)))
您正在调用该函数而不是传递它。使用functools.partial。
self.mytext.append(TextInput(hint_text=t,
on_text_validate=partial(modify.callback, self)))