#python中的反射方法,getattr,setattr,hasattr,delattr
程序员文章站
2022-07-15 16:50:20
...
#python中的反射方法,getattr,setattr,hasattr,delattr
data:2019/12/4
python 面向对象中的反射:
通过字符串的形式操作对象相关的属性 python 中的一切事物都是对象(都可以使用反射)
四个反射相关的函数
hasattr :判断是否有此变量,返回 bool 值
getattr : 获取属性值或者获取方法变量的地址
setattr :给类或者对象设置属性或者方法 (用的场合很少,了解即可)
delattr: 删除类或者对象的属性或方法(用的场合很少,了解即可)
它们能够反射类的属性和方法 , 反射对象的属性和方法 以及反射模块的属性和方法
class Test(object):
dict1 = {
'baby':'me',
'happy':106,
'hello':'world'
}
def __init__(self,num):
self.num = num
def func1(self):
return 666
@classmethod
def func2(cls):
return 888
#反射类的属性和方法
print(hasattr(Test,'dict1')) #判断类中是否有dict1这个类属性
print(getattr(Test,'dict1')) #获取这个类属性的值
print(setattr(Test,'name','jingugu')) #为这个类设置一个name的类属性
print(Test.dict1) #调用类属性
print(Test.name) #调用类属性
print(delattr(Test,'name')) #删除name类属性
print(getattr(Test,'func1')) #调用成员方法地址,但是并不能加()调用,因为这个方法需要类的对象才能调用
t = Test(1)
print(getattr(Test,'func1')(t)) #但是这样也可以调用哒哒哒
print(getattr(Test,'func2')()) #调用类方法
True
{'baby': 'me', 'happy': 106, 'hello': 'world'}
None
{'baby': 'me', 'happy': 106, 'hello': 'world'}
jingugu
None
<function Test.func1 at 0x000001CE65207288>
666
888
#反射对象的属性和方法
t = Test(1)
print(hasattr(t,'num'))
print(getattr(t,'num'))
print(setattr(t,'num',2))
print(t.num)
print(delattr(t,'num'))
try:
print(t.num)
except:
print('报错')
print(getattr(t,'func1')())
True
1
None
2
None
报错
666
推荐阅读
-
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
-
python中的__dict__,__getattr__,__setattr__
-
python中hasattr()、getattr()、setattr()函数的使用
-
python hasattr,getattr,setattr,delattr
-
python3中的setattr(),getattr(),hasattr(),delattr()
-
反射 | hasattr() | getattr() | setattr() | delattr() 的使用方法
-
#python中的反射方法,getattr,setattr,hasattr,delattr
-
python 的getattr()函数、setattr()函数、hasattr()函数、delattr()函数
-
Python类的BIF(issubclass, isinstance, hasattr ,getattr, setattr, delattr)
-
python中的getattr hasattr setattr delattr