2013-07-24 130 views
0

想象以下结构(我剪最IMHO相关部分):访问动态创建的类的实例变量,Kivy框架

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 

打印例如< .generator对象在0x433eef0>。这很好。 但是,如何访问这个类实例变量?

意义,期望的输出将是:

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 

我会得到理想的结果(我有t像这样的帽子,但决定我需要向mvc靠拢)

+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))) –

+0

就是这样。请发表一个答案,让我接受。 – brainovergrow

回答

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)))