我刚开始使用 OOP,我对这段代码感到困惑-
class cartesianPoint:
pass
cp1 = cartesianPoint()
cp1.x = 1.0
cp1.y = 2.0
cp1
>
<__main__.cartesianPoint instance at 0x0000000001E7EB88>
首先为什么我可以向不属于类的对象添加新变量?如果类是对象的蓝图,对象是否应该遵循蓝图?即使python允许你这样做,为什么对象仍然属于同一个类?
在此处查看第 9.4 节:http: //docs.python.org/2/tutorial/classes.html
请注意,只要避免名称冲突,客户端可以将自己的数据属性添加到实例对象而不影响方法的有效性
cp1确实是CartesianPoint类的一个实例,但是您已向该特定实例添加了 2 个新数据成员,这对类本身或任何后续实例都没有影响。
请记住,CartesianPoint 类的每个实例都有自己的字段和方法字典。
数据属性对应于 Smalltalk 中的“实例变量”和 C++ 中的“数据成员”。数据属性不需要声明;像局部变量一样,它们在第一次被分配时就出现了。
使用__slots__,您可以防止分配新的实例变量。