python 动态添加实例方法和类方法

2021-10-21  本文已影响0人  逐风细雨

通过 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
上一篇 下一篇

猜你喜欢

热点阅读