[英]Update kivy recycleview self.data from textinput change
[英]“self.data” usage in python
您好我对Python中的属性用法有疑问。 我了解到在函数定义中我们可以为对象分配一些新属性,例如:self! 但是,当试图使用它时,我得到一个错误,“...实例没有属性'数据'
class Lazy:
def __call__(self, num):
if num is None:
return self.data
# It changes the current object in-place,
# by reassigning the self attribute.
else:
self.data += num
这是我的小代码。 我对此非常陌生。 我无法弄清楚出了什么问题。 非常感谢你。
如果num is None
,则只分配self.data
,因此在分配之前尝试访问它可能会发生。 要防止这种情况,您可以在构造函数中初始化它:
class Lazy:
def __init__(self):
self.data = 0
def __call__(self, num):
if num is None:
return self.data
else:
self.data += num
以下是导致错误的事件序列:
您创建了一个新类的实例。 在这一点上,Python对self.data
一无所知:
lazy = Lazy()
你叫它传递None
:
lazy(None)
现在,Python输入__call__
,因为if条件的计算结果为True
它会尝试返回self.data
。 等一下......它仍然不知道self.data
是什么......所以它吐出一个错误。
为了防止这种情况,您必须在尝试对其值执行某些操作之前分配属性(例如,从函数返回它们)。 它不必在构造函数中:就在Python第一次尝试访问该属性之前。 对于任何变量都是如此,即以下是不可能的:
print(a) # How do you expect Python to know the value of a?
a = 5 # too late to assign it now...
您正在尝试引用self.data
但未初始化/声明它。
class Lazy:
def __init__(self, data=0):
self.data = data #You are initializing data to 0 or a user specified value
def __call__(self, num):
if num is None:
return self.data
# It changes the current object in-place,
# by reassigning the self attribute.
else:
self.data += num
要修改self.data
,必须首先使用类的特殊__init__
方法初始化self.data
属性。
从官方文档:
object .__ init __(self [,...])
在创建实例时调用。 参数是传递给类构造函数表达式的参数。
所以你可以将self.data
设置为0,那么你的__call__
方法应该按照写入的方式工作。
class Lazy:
def __init__(self):
self.data = 0
def __call__(self, num):
if num is None:
return self.data
else:
self.data += num
您可以在__init__()
方法或其他任何地方初始化该属性(尽管__init__()
是推荐的位置)。
尝试self.data
并初始化它(如果它不存在)。
class Lazy:
def __call__(self, num):
try:
self.data
except:
self.data = 0
if num is None:
return self.data
# It changes the current object in-place,
# by reassigning the self attribute.
else:
self.data += num
我希望它有所帮助。
我想在你的代码中指出:
class Lazy:
def __init__(self):
self.data = 0
def __call__(self, num):
if num is None:
return self.data
假如你调用你的实例如: lazy(some_value)
那么你的else分支将执行哪个求值为:
else:
self.data += num # self.data = self.data + num
但是,在这种情况下可能存在self.data可能未定义的情况,也会出现上述错误。
我同意上述所有答案,但我也需要关注这个问题。
请享用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.