以下代码如何工作:
- 同一类的不同对象如何具有不同数量的属性?
class MyClass:
pass
p1 = MyClass()
p1.atrib1="1"
p1.atrib2="2"
p1.atrib3="3"
p2 = MyClass()
p2.atrib1="1"
p2.atrib2="2"
print(p1.atrib3) // ok
print(p2.atrib3) //error
这在内部是如何工作的,鉴于在 Python 中,构造函数不会阻止向现有对象添加新属性,而是确保每个创建的对象都具有一组特定的属性。
对象属性和类属性(静态属性)——所有对象都可用——与其他 PL 相比如何?例如,在 C++ 中 - 有字段和方法变量 - 区别在于范围,有静态变量 - 仅在访问类时可用,对对象不可用。据我了解,Python 中的对象属性类似于 C++ 中的字段(但我仍然不清楚每个对象如何拥有它们),静态属性只是 C++ 中静态字段的模拟,但在 Python 中 -是否可以通过特定对象访问它们?
PS - 问题的标签包含 C++ 标签 - 因为我想使用仅与 C++ 进行比较的示例来了解想法的差异。
您将字段添加到类的实例中。Python 允许这样做。每个类实例都可以有自己添加的字段。实例化时,对象的实例接收类字段并可以向其中添加一些自己的字段。但同时,每个实例在实例化后已经独立存在,一个实例对添加到另一个实例的字段一无所知。
据我了解,类 C 语言,如果它们允许您“在旅途中”添加一些东西,那么它们会以不太常规的方式进行。它们比 Python 更严格,在 Python 中,你几乎可以通过简单的赋值来“即时”做任何事情。
而“静态”是指类的方法和字段,而不是类的实例。它们可以在不实例化实例的情况下使用。