为什么我们被允许在Python中动态地向类中添加属性?

use*_*603 0 python oop encapsulation class-attributes python-3.x

Python我们可以将属性添加到一个对象(类)动态地,例如:

class Foo(object):
    pass

foo = Foo()
foo.a = 10
Run Code Online (Sandbox Code Playgroud)

我的问题可能有点理论上的问题.所以,它很方便.但是我们为什么要使用这个功能??? 当这种方法更可取时,有什么特别的情况吗?封装怎么样?

Dav*_*ave 5

总之:灵活性.我需要使用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) 
Run Code Online (Sandbox Code Playgroud)