【问题标题】:Access dynamically created class instance variable, Kivy framework访问动态创建的类实例变量,Kivy 框架
【发布时间】:2013-07-24 16:09:49
【问题描述】:

想象一下下面的结构(我已经剪掉了大部分恕我直言的相关部分):

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> 打印 ma​​in.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)

【问题讨论】:

  • 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)))
  • 就是这样。请发表一个答案,让我接受。

标签: python kivy


【解决方案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)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-24
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多