我刚开始学习python,对于为什么我能够做到这一点,我很困惑。会有人请解释为什么这个工程: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
我试过这种方法,它并没有为我工作(如预期) - 既不cli.foo也不cli.foo2被定义为。 –
@AMADANON:这有点奇怪。 [它适用于我](http://键盘。org/U5XOZL5c),以及OP和其他。 – icktoofay
它已被编辑/修复 - 我仍然在我的终端窗口中剪切和粘贴:) –