产生问题的原因:python在继承时,父类被篡改成为非class type,无法实现继承;
篡改的原因:装饰器
解决思路:将父类转为python的class类型,在基类中继承
吐槽一句:万恶的闭包~ 又爱又恨
示例代码
# -*- encoding: utf-8 -*-
"""
@File: 123.py
@Time: 2023/3/1 13:45
@Author: cyl
"""
from functools import wraps
def singleton(cls):
_instance = None
@wraps(cls)
def wrap(*args, **kwargs):
if not cls._instance:
cls._instance = cls(*args, **kwargs)
return _instance
return wrap
@singleton
class A:
def __init__(self):
...
print(type(A)) # <class 'function'>
class Factory(A):
def __init__(self):
...
print(Factory.mro()) # 不被执行
报错信息
Traceback (most recent call last):
File "xxx\123.py", line 31, in <module>
class Factory(A):
TypeError: function() argument 'code' must be code, not str
解决办法
AClass = A().__class__
class Factory(AClass):
def __init__(self):
super(Factory, self).__init__()