这里我有一个属性“a”,它是在第一个类方法中定义的,应该在第二个类方法中更改。 按顺序调用它们时,将显示以下消息:
AttributeError: 'Class' object has no attribute 'a'
我发现的唯一方法是在第二个方法中再次定义“a”,但在实际代码中它有很长的继承性,应用程序将被弄乱。 为什么不起作用?难道自我。a等于类。a吗?
class Class(object):
def method_1(self):
self.a = 1
def method_2(self):
self.a += 1
Class().method_1()
Class().method_2()
简而言之,不是。代码的问题在于每次创建新实例时。
编辑:正如abarnert在下面提到的,在
Class.a
和c.a
之间有很大的区别。实例属性(第二种情况)属于每个特定对象,而类属性属于类。查看下面abarnert的评论或讨论here以获取更多信息。你的代码相当于
你可能想做一些像
或者更好的方法是使用
a
属性初始化c
新创建的
Class
的实例没有属性a
,而不调用method_1
,如您的示例所示。考虑一下您的代码的这个稍微修改过的版本:
每次调用
Class()
(或CreateNewClassInstance()
)时,都会创建一个具有自己属性a
的新对象。在初始化a
之前,没有具有该名称的属性。大多数情况下,这不是一个问题-但是,
+=
将在添加一个之前尝试加载self.a
-这就是在本例中导致您的AttributeError
的原因。相关问题 更多 >
编程相关推荐