如何继承C实现的Python类并添加方法?解决继承报错问题
解决继承C扩展LRU类的报错问题
出现“type ‘type’ is not an acceptable base type”错误的核心原因是:你使用的LRU是C语言实现的扩展类型,并非标准Python类,它没有提供被Python类继承的支持,因此无法直接作为父类使用。
推荐解决方案:用组合替代继承
通过在自定义类内部维护一个LRU实例,代理LRU的核心操作方法,同时添加自定义功能,这是扩展C扩展类型的常规且安全的做法:
from lru import LRU class A: def __init__(self, max_size): # 初始化内部的LRU实例 self._lru = LRU(max_size) # 代理LRU的常用操作方法,按需添加 def __getitem__(self, key): return self._lru[key] def __setitem__(self, key, value): self._lru[key] = value def get(self, key, default=None): return self._lru.get(key, default) def pop(self, key): return self._lru.pop(key) def clear(self): self._lru.clear() # 添加你需要的自定义方法 def foo(self): print("a")
使用示例
# 创建A的实例,指定LRU最大容量 a_instance = A(max_size=100) # 像使用原生LRU一样进行键值对操作 a_instance["name"] = "test" print(a_instance.get("name")) # 调用自定义方法 a_instance.foo()
不推荐的方案:猴子补丁
虽然可以通过动态给LRU类型添加方法实现需求,但这种方式会修改原类型的全局行为,可能引发意外的兼容性问题,因此不建议在生产代码中使用。
内容的提问来源于stack exchange,提问作者Cherrymelon
相关产品推荐
相关产品推荐

