在Python
中,我们可以动态地向对象(类(添加属性,例如:
class Foo(object):
pass
foo = Foo()
foo.a = 10
我的问题可能有点理论性。所以,它很方便。但是我们为什么要使用该功能呢???是否有任何特殊情况会更可取这种方法?封装呢?
一句话:灵活性。例如,当需要将带有 GUI 对象的数据传递给处理附加到它们的事件的方法时,我使用了动态属性。我敢肯定还有几十种其他用途。
也就是说,如果您是那种喜欢强制属性并且不允许动态添加新属性的人,您可以这样做。我可以想象一些有用的地方,例如帮助确保你不会在代码中设置错误的值(拼写错误(。有点自我检查。
为了限制/防止添加动态值,您可以向类添加 __slots__
属性,如下例所示。
class Foo(object):
__slots__ = ['val', 'val2']
pass
foo = Foo()
foo.val = 10
print(foo.val)
foo.b = 5 # throws exception
print(foo.b)