我使用的Python模块最近更新了,现在它的所有类都使用__slots__
,因此打破了我所依赖的一些功能。有一些解决方案:
__slots__
被黑了。显然最容易,但我不愿意。__slots__
。我写了一个光荣的hacky函数,它搜索模块中的所有类,任何__slots__
被替换为添加了__dict__
的克隆类,并删除了成员描述符和插槽。解决方案2有效,但感觉就像是黑客。我更喜欢构建一种方法,允许模块可选地打开或关闭__slots__
,然后向作者发出拉取请求。事实证明这非常棘手。
我的第一次尝试:
module.py:
USE_SLOTS = True
class SomeClass(object):
if USE_SLOTS:
__slots__ = ()
如果您可以确保在USE_SLOTS
导入module.py
之前将USE_SLOTS
设置为False(并因此详细说明),那么这样可行,但它确实非常精致且会意外中断。
工厂类可能是理想的,因为这将返回基于if obj.__class__ == SomeClass
的不同类,但是库中充满了isinstance(obj, SomeClass)
而不是{{1}},所以这不会起作用。
我现在花了这么长时间,所以有人对如何做到这一点有好主意吗?