文章目录
python 面向对象的反射值得是通过字符串的形式操作对象的相关属性。主要有四个函数:
1、 hasattr(对象,字符串形式的属性名)两个参数,返回结果True or False. 判断对象中是否有此属性
class People:
def __init__(self, name, age):
self.name = name
self.age = age
def talk(self):
print('talking')
p1 = People('小明', 18)
print(hasattr(p1,'name'))
# True
print(hasattr(p1,'namezzz'))
# False
2、getattr(对象,字符串形式的属性,default =None),拿到属性
print(getattr(p1,'name'))
# 小明
print(getattr(p1, 'namemmm'))
# 'People' object has no attribute 'namemmm'
print(getattr(p1, 'namemmm',None))
# None
print(getattr(p1, 'namemmm',1))
# 1
3、setattr(对象,属性名,属性值)
setattr(p1,'sex','male')
print(p1.__dict__)
{'name': '小明', 'age': 18, 'sex': 'male'}
4、delattr(对象,字符串形式的属性名)
delattr(p1,'name')
print(p1.__dict__)
# {'age': 18}
简单的利用反射操作属性
class Service:
def run(self):
while True:
cmd = input(':').strip()
if hasattr(self, cmd): # 判断属性
func = getattr(self, cmd) # 拿到属性
func()
def get(self):
print('get...')
def put(self):
print('put...')
# obj = Service()
# obj.run()