>>> from env_helper import info; info()
页面更新时间: 2024-04-04 21:00:40
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

13.5. 谈谈python的动态属性

正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。

看下面一种常见的get/set操作

>>> class Student(object):
>>>     pass
>>>
>>> s = Student()
>>> s.name = 'alex'
>>> print(s.name)
alex

它的动态属性是怎么来的呢?其实,它真正的过程是这样的

>>> class Student(object):
>>>     pass
>>> s = Student()
>>> s.__setattr__("name","alex")
>>> s.__getattribute__("name")
'alex'

由此可见,__setattr____getattribute__ 方法才是实例获得动态属性的真正原因。