Python反射是指在运行时动态地获取、操作和修改对象的属性和方法。通过反射,我们可以在不知道对象具体类型的情况下,通过字符串的形式来访问对象的属性和方法。
Python中实现反射的主要方法有以下几种:
- getattr(obj, name[, default]):获取对象obj的属性name的值,如果属性不存在则返回默认值default。
- setattr(obj, name, value):设置对象obj的属性name的值为value。
- hasattr(obj, name):判断对象obj是否具有属性name,返回布尔值。
- delattr(obj, name):删除对象obj的属性name。
使用反射可以实现一些动态的操作,比如根据用户输入的字符串来调用相应的函数或方法,或者根据字符串来获取对象的属性值。
class Dog(object):
def __init__(self,name):
self.name = name
def eat(self):
print('%s is eating' % self.name)
def drink(self):
print('%s is drinking' % self.name)
d = Dog('Tom')
chioce = input('请输入要调用的方法:').strip()
#
# if chioce == 'eat':
# d.eat()
# elif chioce == 'drink':
# d.drink()
# else:
# print('没有这个方法')
print(hasattr(d, chioce)) #根据用户输入chioce,判断对象d是否有该方法;避免用户不在类中方法,输入错误;
if hasattr(d, chioce):
print('有这个方法')
getattr(d, chioce)() # 根据用户输入chioce,调用对象d的方法;避免上面使用if else判断,代码冗余;
else:
print('没有这个方法')