我知道有很多问题要问这个问题,但我没有找到任何方法,而是找到了我想要的东西。我什么时候运行这个代码并且稍后getIngredient()我得到这个错误'ListItem'对象没有属性'ing'。请提前帮助和谢谢。
class ListItem(FloatLayout):
def __init__(self, ing):
super(ListItem, self).__init__()
self.ing = ing
def getIngredient(self):
return self.ing.name
我也是在kivy中放入盒子布局的对象实例上调用它。
答案 0 :(得分:2)
好吧,如果我将该代码粘贴到Python 2.7.10 iPython会话中,使用存根/空FloatLayout类,那么我只用一个字符串实例化并调用 getIngredient()方法,是:
AttributeError: 'str' object has no attribute 'name'
......这似乎完全可以预料。如果我创建了一个对象并给它一个.name
属性,那么代码工作正常。
因此,您的问题似乎可能涉及真实FloatLayout父类的一些细节;或者你正在使用的Python版本(或两者)。
一般情况下,我希望您在调用.ing
之前添加自己的自定义属性(super()
} ...如果您要添加内容而非覆盖 - 骑它。 (一般情况下,我也希望你将链上的任何初始化参数传递给你的超类(在过滤掉你所截取的任何特定于派生/子类的任何内容之后)。正确完成后应该让你相对健壮即使你的父类的实现有所改变,即使你的类的后代试图利用你父类的未想象的扩展。
(我知道,那种“未来证明”是模糊的,抽象的,甚至有点脆弱......但它总比忽略这个问题更好。)