我剛開始學習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
它已被編輯/修復 - 我仍然在我的終端窗口中剪切和粘貼:) –