如何自动创建所有成员函数为空实现的类克隆?
自动生成空实现克隆类的方案
要自动创建原类C的克隆类Cc(所有成员函数为空实现),可以通过编写工具函数遍历原类方法并生成空实现,最终组装出目标克隆类。以下是具体实现:
实现思路
- 遍历原类的所有属性,筛选出用户定义的可调用方法(排除
__init__这类Python特殊方法); - 为每个方法创建空实现函数(接收任意参数但不执行任何逻辑);
- 动态生成新类,将这些空实现方法绑定到新类中。
代码实现
工具函数定义
def create_no_op_clone(cls): no_op_methods = {} # 遍历原类属性,筛选出用户定义的方法 for name in dir(cls): if name.startswith('__'): continue attr = getattr(cls, name) if callable(attr): # 定义空实现函数 def no_op(*args, **kwargs): pass no_op_methods[name] = no_op # 动态生成克隆类,命名为原类名+Clone clone_cls = type(f"{cls.__name__}Clone", (object,), no_op_methods) return clone_cls
使用示例
假设原类C定义如下:
class C: def f(self): print("执行C类的f方法") def g(self, value): print(f"执行C类的g方法,参数:{value}")
生成克隆类并应用到目标函数:
# 生成C的空实现克隆类Cc Cc = create_no_op_clone(C) # 定义使用默认参数的函数 def f(p = Cc()): p.f() p.g("测试参数") # 测试调用 f() # 无任何输出,因为Cc的方法是空实现 f(C()) # 输出:执行C类的f方法;执行C类的g方法,参数:测试参数
扩展说明
- 如果需要克隆类继承原类(保留原类的非方法属性),可以将动态生成类的基类改为原类:
clone_cls = type(f"{cls.__name__}Clone", (cls,), no_op_methods) - 该方案会自动处理原类继承来的方法,只要是可调用的成员,都会被替换为空实现。
内容的提问来源于stack exchange,提问作者Claas Bontus
相关产品推荐
相关产品推荐

