我刚开始学习 python,我很困惑为什么我能做到这一点。有人请解释为什么会这样:
class foo():
@property
def hello(self):
return "hello world"
if __name__ == '__main__':
cli = foo()
cli.foo2 = 3
print cli.hello #prints hello world
print cli.foo2 #prints 3
当原始类中不存在它时,我能够创建一个新属性并分配一个值,这对我来说没有意义。有没有办法防止这种行为,或者至少有人可以解释这背后的逻辑?
-edit- 我很高兴知道这是 python 中对象的正常行为,我不只是做错了什么。因为我通常在 VBA 和 C# 中工作,所以感觉不太对劲。根据其他人在下面的答案中所说的,我认为添加插槽会阻止以这种方式将任何内容添加到课程中,但也许我不明白。
class foo():
@property
def hello(self):
return "hello world"
__slots__ = []
if __name__ == '__main__':
cli = foo()
cli.foo2 = 3
print cli.hello #prints hello world
print cli.foo2 #prints