運行下面的代碼是否會報錯,如果報錯請說明哪里有什么樣的錯,如果不報錯請說出代碼的執行結果。
class A: def __init__(self, value): self.__value = value @property def value(self): return self.__value obj = A(1) obj.__value = 2 print(obj.value) print(obj.__value)
點評:這道題有兩個考察點
一個考察點是對_和__開頭的對象屬性訪問權限以及@property裝飾器的了解
另外一個考察的點是對動態語言的理解,不需要過多的解釋。
擴展:如果不希望代碼運行時動態的給對象添加新屬性,可以在定義類時使用__slots__魔法。
例如,我們可以在上面的A中添加一行__slots__ = ('__value', ),再次運行上面的代碼,將會在原來的第10行處產生AttributeError錯誤。