通过 types 模块动态添加实例方法和类方法的实践笔记
import types
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def speak_age(self):
print(f"age is {self.age}")
def speak_name(self):
print(f"name is {self.name}")
@staticmethod
def add_static_method():
print("call add_static_method")
@classmethod
def add_class_method(cls):
print("call add_class_method")
if __name__ == "__main__":
tom = Person("tom", 30)
tom.speak_age()
# 添加实例方法,并调用
tom.speak_name = types.MethodType(speak_name, tom)
tom.speak_name()
# 添加静态方法
Person.add_static_method = add_static_method
# 添加类方法
Person.add_class_method = add_class_method
tom.add_static_method()
tom.add_class_method()
# 新实例依然可以调用
ana = Person("ana", 18)
ana.add_static_method()
运行后控制台输出
image.png
网友评论