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__方法才是实例获得动态属性的真正原因。

原文地址:https://www.cnblogs.com/alexkn/p/4660248.html