1. 动态添加属性
添加实例和类属性
class Person():
def __init__(self,name):
self.name=name
p1=Person("laowang")
p1.age=30 #给实例 添加属性
Person.sex="男" # 给类添加属性
print ("%s的信息如下 年龄:%d,性别:%s"%(p1.name,p1.age,p1.sex))
p2=Person("xiaoli")
print ("%s的信息如下 年龄:%d,性别:%s"%(p2.name,p2.age,p2.sex))
# 这个一定会报错,因为age 是实例属性, 新建的实例不能用
动态 添加 类方法 和实例方法
我们也按照添加属性的方式 进行添加动态方法,看看是否可行 如下:
class Person():
def __init__(self,name):
self.name=name
p1=Person("laowang")
p1.age=30 #给实例 添加属性
Person.sex="男" # 给类添加属性
print ("%s的信息如下 年龄:%d,性别:%s"%(p1.name,p1.age,p1.sex))
p2=Person("xiaoli")
def run(self):
print("runing%s"%self.name)
@classmethod
def eat(cls):
print("eating")
p1.run=run
Person.eat=eat
Person.eat()
p1.run()
打印报错如下:
eating
File "D:/works/Unittest/test.py", line 27, in <module>
p1.run()
TypeError: run() missing 1 required positional argument: 'self'
看出类方法 动态添加成功, 但是实例方法没有绑定成功, 按照提示信息分析,是因为self 他不能识别。
咱们是有办法的, 看如下修改 就可以成功了 ,
import types
p1.run=types.MethodType(run,p1) # 把 方法 用MethodType 绑定到 实例对象内
p1.run()