你好,我有一个关于Python中属性用法的问题。我了解到,在函数定义中,我们可以为对象指定一些新属性,例如:self!然而,当我试图使用它时,我得到了一个错误,那就是。。。实例没有“data”属性
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
这是我的小密码。 我是个新手。我搞不清出了什么事。 非常感谢你。
您试图引用
self.data
,但未初始化/声明它。您只分配
self.data
如果num is None
,因此可能会在分配之前尝试访问它。为了防止这种情况,可以在构造函数中初始化它:以下是导致错误的事件序列:
创建类的新实例。此时,Python对
self.data
一无所知:你叫它通过
None
:现在,Python输入
__call__
,因为if条件的计算结果是True
,所以它尝试返回self.data
。等一下。。。它仍然不知道self.data
是什么。。。所以它指出了一个错误。为了防止这种情况发生,在尝试对属性的值执行操作(例如,从函数返回属性)之前,必须先分配属性。它不必在构造函数中:就在Python第一次尝试访问属性之前。对于任何变量都是这样,即以下情况是不可能的:
为了修改
self.data
,必须首先使用类的特殊__init__
方法初始化self.data
属性。从官方文件来看:
因此,可以将
self.data
设置为0,那么__call__
方法应该按编写的那样工作。相关问题 更多 >
编程相关推荐