【发布时间】:2019-12-08 21:59:07
【问题描述】:
我刚开始学习python(来自C);我发现自己对定义属于一个类的变量的方式感到非常困惑(不管是“类类型”还是“实例类型”,我的问题更基本)。 到目前为止,我已经尝试过这些代码行:
class A:
pass
A.a = 1
A.b = 2
print(A.a+A.b)
这段代码出人意料地返回了“3”(虽然我预计会出错),这导致我来到这里。 我不明白为什么解释器能够推断出属于“A”类的变量(我从未定义过)。
【问题讨论】:
-
你确实定义了它们。通过执行
A.a = 1,您现在创建了A类的属性a。这是可能的,因为用户定义的类带有__dict__,它保存了属性的映射。例如尝试做object().a = 1看看会发生什么 -
您的困惑源于您没有在
class语句中首先声明属性,但Python没有拥有变量声明,只有定义。 -
@chepner 我同意,我现在患有斯德哥尔摩综合症到 C...
-
@Guillermo.D.S. - 我不确定它是否会消失,C 是一个非常好的捕捉者
-
我会注意到,虽然您可以随时为(大多数)对象添加属性,但您应该避免这样做.在
class语句本身中初始化expected 类属性,并在类的__init__方法中初始化预期实例属性。您可以在以后使用直接访问更改其中任何一个的值,但不要以这种方式添加新属性。
标签: python