文章目錄

Python中内置的一些属性相关的函数,如dir, getattr, hasattr, setattr, vars, 这里主要来看看一些特殊方法

编写测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Class:
def __delattr__(self, name):
print('## delattr')
super().__delattr__(name)

def __getattr__(self, name):
print('## getattr')
return 'default'

def __getattribute__(self, name):
print('## getattribute')
super().__getattribute__(name)

def __setattr__(self, name, value):
print('## setattr')
super().__setattr__(name, value)


if __name__ == "__main__":
c = Class()
getattr(c, 'name')
print("-----")
c.name
print("-----")
c.data = 'test'
print("-----")
c.data
print("-----")
del c.data

得到输出结果

1
2
3
4
5
6
7
8
9
10
11
## getattribute
## getattr
-----

## getattribute
## getattr
-----

## setattr
-----

## getattribute
-----

## delattr

可以看到c.name和getattr(c, ‘name’)都会调用__getattribute__方法,之后调用__getattr__方法,c.data = ‘test’会调用__setattr__方法,之后c.data只调用了__getattribute__方法, del c.data调用了__delattr__方法。

所以可以总结如下

  • __getattribute__在获取属性时都会被调用到
  • __getattr__当对象没有相应的属性时,会被调用
  • __setattr__在设置属性时会被调用
  • __delattr__在删除属性时会被调用

打赏作者

文章目錄