Python的高级特性5:谈谈python的动态属性
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。
看下面一种常见的get/set操作
In [174]: class Student(object): .....: pass .....: In [175]: s = Student() In [176]: s.name = 'alex' In [177]: print(s.name) alex
它的动态属性是怎么来的呢?其实,它真正的过程是这样的
In [178]: class Student(object): .....: pass .....: In [179]: s = Student() In [180]: s.__setattr__("name","alex") In [181]: s.__getattribute__("name") Out[181]: 'alex'
由此可见,__setattr__与__getattribute__方法才是实例获得动态属性的真正原因。