python在不改变类的基础上,从外面添加新的方法

python在不改变类的基础上,从外面添加新的方法

使用types.MethodType:

types.MethodType允许你将一个函数转换为一个方法,然后将其绑定到类上

python 复制代码
import types

class MyClass:
    def __init__(self, value):
        self.value = value

def new_method(cls_instance):
    print(f"The value is {cls_instance.value}")

# 使用types.MethodType将函数转换为方法
MyClass.new_method = types.MethodType(new_method, MyClass)

# 现在MyClass有一个新方法new_method
obj = MyClass(10)
obj.new_method()  # 输出: The value is 10

直接通过类字典赋值:

直接给类的字典添加方法是一种更简单直接的方式。

python 复制代码
class MyClass:
    def __init__(self, value):
        self.value = value

def new_method(self):
    print(f"The value is {self.value}")

# 直接将函数new_method添加到MyClass的字典中
MyClass.new_method = new_method

# 现在MyClass有一个新方法new_method
obj = MyClass(10)
obj.new_method()  # 输出: The value is 10

使用类装饰器:

类装饰器是一种在定义后修改类的方式,可以在类定义后添加方法

python 复制代码
def add_method(cls):
    def new_method(self):
        print("Hello from the new method!")
    
    # 添加方法到类
    cls.new_method = new_method
    return cls

@add_method
class MyClass:
    pass

# 现在MyClass有一个新方法new_method
obj = MyClass()
obj.new_method()  # 输出: Hello from the new method!
相关推荐
睿智的海鸥几秒前
Markdown 语法大全详解
开发语言·前端·javascript·css·html
w_com.h1 分钟前
C语言中 栈、队列、双向链表
c语言·开发语言·链表
XS03010610 分钟前
Java 基础(九) IO流
java·开发语言·php
_Evan_Yao11 分钟前
缓存金字塔上的红色闪电:Redis 如何借力 CPU 的 L1/L2/L3 与 TLB 飞驰
java·数据库·redis·后端·缓存
Teable任意门互动12 分钟前
多维表格哪家最好用最容易上手?国产开源 Teable 测评
开发语言·数据库·开源·excel·飞书·开源软件
独隅12 分钟前
此电脑网络位置异常的AD域排错指南
开发语言·php
陈天伟教授13 分钟前
GPT Image 2
开发语言·人工智能·架构
他是龙55121 分钟前
68:Java 原生反序列化 & SpringBoot 攻防
java·开发语言·spring boot
西岭千秋雪_23 分钟前
终战诏书.
java
weixin_3812881824 分钟前
Layui怎么在表格标题栏中嵌入一个迷你的HTML搜索表单
jvm·数据库·python