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

为什么允许我们在Python中动态地向类添加属性?,python,python-3.x,oop,encapsulation,class-attributes,Python,Python 3.x,Oop,Encapsulation,Class Attributes,在Python中,我们可以动态地向对象(类)添加属性,例如: class Foo(object): pass foo = Foo() foo.a = 10 我的问题可能有点理论性。 所以,它很方便。但是为什么我们应该使用该功能???是否存在这种方法更可取的特殊情况?那么封装呢?一句话:灵活性。例如,当需要将带有GUI对象的数据传递给处理附加到GUI对象的事件的方法时,我使用了动态属性。我相信还有很多其他用途 也就是说,如果你是那种喜欢强制属性而不允许动态添加新属性的人,你可以这样做。

Python
中,我们可以动态地向对象(类)添加属性,例如:

class Foo(object):
    pass

foo = Foo()
foo.a = 10
我的问题可能有点理论性。
所以,它很方便。但是为什么我们应该使用该功能???是否存在这种方法更可取的特殊情况?那么封装呢?

一句话:灵活性。例如,当需要将带有GUI对象的数据传递给处理附加到GUI对象的事件的方法时,我使用了动态属性。我相信还有很多其他用途

也就是说,如果你是那种喜欢强制属性而不允许动态添加新属性的人,你可以这样做。我可以想象它在一些地方是有用的,例如帮助确保代码中没有设置错误的值(输入错误)。有点自我检查

为了限制/防止添加动态值,您可以向类中添加
\uuuuu\uuu
属性,如下例所示

class Foo(object):
    __slots__ = ['val', 'val2']
    pass

foo = Foo()
foo.val = 10

print(foo.val)

foo.b = 5 # throws exception
print(foo.b) 

一句话:灵活性。例如,当需要将带有GUI对象的数据传递给处理附加到GUI对象的事件的方法时,我使用了动态属性。我相信还有很多其他用途

也就是说,如果你是那种喜欢强制属性而不允许动态添加新属性的人,你可以这样做。我可以想象它在一些地方是有用的,例如帮助确保代码中没有设置错误的值(输入错误)。有点自我检查

为了限制/防止添加动态值,您可以向类中添加
\uuuuu\uuu
属性,如下例所示

class Foo(object):
    __slots__ = ['val', 'val2']
    pass

foo = Foo()
foo.val = 10

print(foo.val)

foo.b = 5 # throws exception
print(foo.b) 

1字,元编程。编写在运行时更改代码的代码。想象一下,您可以按列名编写filter\u tablename\u,它会在您调用时自动生成该函数,获取您编写的任何内容来代替tablename和columname,并直接使用它们。它非常强大。一个字,元编程。编写在运行时更改代码的代码。想象一下,您可以按列名编写filter\u tablename\u,它会在您调用时自动生成该函数,获取您编写的任何内容来代替tablename和columname,并直接使用它们。它非常非常强大。