反射
反射
- 在 Python 中,反射是指在运行时获取对象的信息,包括对象的属性和方法,以及动态地操作这些属性和方法。在面向对象编程中,反射允许你在运行时检查类和对象的信息,而不是在编写代码时硬编码这些信息。
(1)获取对象属性值和方法/调用getattr()
-
语法:
getattr(object, name[, default]) -
使用
getattr()函数可以获取对象的属性值。 -
不存在则报错,但是可以指定不存在的时候返回的默认值
class Heart:
def __init__(self):
self.age = 18
heart = Heart()
print(getattr(heart, 'age')) # 输出: 18
print(getattr(heart, 'name', None)) # 输出: None
- 使用
getattr()函数可以获取对象的方法。
class Heart:
def talk(self):
return f'说话'
heart = Heart()
method = getattr(heart, 'talk')
result = method()
print(result) # 输出: 说话
- 使用
getattr()函数获取方法,然后直接调用。
class Heart:
def talk(self):
return "说话"
heart = Heart()
method = getattr(heart, 'talk')
result = method()
print(result) # 输出: 说话
(2)设置对象的属性setattr()
-
语法:
setattr(object, name, value) -
使用
setattr()函数可以设置对象的属性值。
class Heart:
def __init__(self):
self.age = 18
heart = Heart()
setattr(heart, 'age', 100)
print(heart.age) # 输出: 100
(3)检查对象是否有某个属性或方法hasattr()
-
语法:
hasattr(object, name) -
使用
hasattr()函数可以检查对象是否具有指定的属性或方法。 -
存在就返回True,不存在就返回False
class Heart:
def __init__(self):
self.age = 42
heart = Heart()
has = hasattr(heart, 'age')
print(has) # 输出: True
has1 = hasattr(heart, 'name')
print(has1) # 输出: False
(4)删除对象属性delattr()
-
语法:
delattr(object, name) -
使用
delattr()函数可以删除对象属性的内建函数。
class Heart:
def __init__(self):
self.age = 18
heart = Heart()
print(hasattr(heart, 'age')) # True
delattr(heart, 'age')
print(hasattr(heart, 'age')) # False
小练习
class Heart:
def __init__(self):
self.age = 18
heart = Heart()
def func(obj=None, name=None, value=None):
if hasattr(obj, name):
return getattr(obj, name)
else:
setattr(obj, name, value)
print(f'设置成功')
return func(obj=obj, name=name, value=value)
print(func(obj=heart, name='age')) # 18
print(func(obj=heart, name='name', value='heart')) # 设置成功 heart
def read():
print(f'正在读书')
func(obj=heart, name='read', value=read)() # 设置成功 正在读书

浙公网安备 33010602011771号