运行下面的代码是否会报错,如果报错请说明哪里有什么样的错,如果不报错请说出代码的执行结果。
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错误。