class Foo:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self): # __str__特殊成员函数,是打印类的实例对象时所返回的值
s = ''
for name, value in vars(self).items():
# vars方法,是将对象的所有成员的名值对以字典的形式返回,这里借用vars函数,实现以动态的形式返回对象所有成员
# 因为demo中有演示增加和删除成员的动作
if s == '':
s = f'{name}:{value}'
else:
s = ''.join([s, f',{name}:{value}'])
return s
def age_grow(self, years):
self.age += years
obj = Foo('张三', 18)
print(obj) # name:张三,age:18
func = getattr(obj, 'age_grow') # getattr(对象,对象成员的名字)利用反射,获取对象的成员,这里是把对象的age_grow方法赋予给了func变量,此时func变量具有了函数的作用
func(6) # 年龄增加了6岁,obj.age的值变成了24
print(obj) # name:张三,age:24
setattr(obj, 'sex', '男') # setattr(对象, 成员名字, 赋的值)利用反射,设置或增加了一个成员属性,赋值sex,这里是增加了一个sex成员(因为并没有这个成员,则是增加),赋值为男
if hasattr(obj, 'sex'): # 检查对象是否拥有某个成员,返回bool值
print('Yes')
else:
print('No')
print(obj) # name:张三,age:24,sex:男
delattr(obj, 'sex') # 删除对象中某个成员
print(obj) # name:张三,age:24