在Python
中,我们可以动态地向对象(类)添加属性,例如:
class Foo(object):
pass
foo = Foo()
foo.a = 10
我的问题可能有点理论化。 所以,这很方便。但是为什么,我们应该使用该功能吗???有什么特殊情况可以采用这种方法?封装呢?
答案 0 :(得分:5)
也就是说,如果您是喜欢强制属性并且不允许动态添加新属性的人,那么您可以这样做。我可以想象出一些有用的地方,例如,帮助确保您未在代码中设置错误的值(典型)。自我检查的东西。
为了限制/阻止动态值的添加,您可以向该类添加__slots__
属性,如下所示。
class Foo(object):
__slots__ = ['val', 'val2']
pass
foo = Foo()
foo.val = 10
print(foo.val)
foo.b = 5 # throws exception
print(foo.b)
答案 1 :(得分:3)
根据https://rosettacode.org/wiki/Add_a_variable_to_a_class_instance_at_runtime:
当实例的方法/变量基于直到运行时才可用的数据文件时,这很有用。哈尔·富尔顿(Hal Fulton)提供了一个在使用Ruby进行元编程的练习中创建OO CSV解析器的示例。这被Pythonistas和其他一些人称为“ monkeypatching”。
当我第一次尝试在所有数据库中都可以使用的大数据算法时,我使用了此功能,您不知道每个表的属性,但是您不必知道,我想就是这样