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!
相关推荐
Frank_refuel16 小时前
QT->信号与槽详解下(概述、使用、自定义、连接方式、其他说明)
开发语言·qt
1104.北光c°16 小时前
【重写优化 新增绘图】布谷鸟过滤器:布隆过滤器的更优缓存穿透解?
java·开发语言·后端·缓存·缓存穿透·布隆过滤器·布谷鸟过滤器
萧逸才16 小时前
【learn-claude-code】S06ContextCompact - 上下文压缩:上下文会满,你需要腾出空间
java·人工智能·ai
智算菩萨16 小时前
【Pygame】第23章 平台跳跃游戏:基于有限状态机的2D平台物理模拟与摄像机视口管理系统(有超详细中文注释供大家学习)
python·游戏·pygame
m0_6948455716 小时前
RevelGo搭建教程:类Rails开发体验的Go Web框架
服务器·开发语言·后端·docker·golang·开源·github
CCIE-Yasuo16 小时前
《永恒战士2-无双战神》无限金币版(提供apk下载)安卓Android逆向记录学习-Deepseek-AI辅助
android·java·学习·游戏
云泽野16 小时前
SpringBoot整合QQ邮箱发送邮件及微服务公共模块封装实战
java·spring boot·微服务
北冥有羽Victoria16 小时前
TGC:深度时序图聚类的动态建模与时空平衡|ICLR 2024 深度解读
人工智能·python·算法·机器学习·支持向量机·聚类
Ssan PRIN16 小时前
Modbus报文详解
服务器·开发语言·php
ZC跨境爬虫16 小时前
Playwright核心操作实战精讲(QQ空间+百度+iframe,含等待_键盘_iframe操作)
前端·爬虫·python·计算机外设