假设我有一个
class A:
def __init__(self, *args):
pass
我想要一个装饰器来复制A
的定义并用新类扩展它。
def decorator(cls): # some decorator here
# make a new class which inherits from A
# return it while preserving the original A
这可能吗? (PS:这是为了避免维护问题。)
最佳答案
当您使用装饰器语法调用函数时:
@my_decorator_function
class A:
pass
装饰器函数的返回值将替换A
的现有定义。 。因此,如果您希望它创建一个新类并“在保留原始 A 的同时返回它”,那么您将面临一个棘手的挑战。你什么return
将取代A
,所以你需要决定这是否应该是原始的 A
或新类(class)。您可以将另一个放在其他地方。
例如,此装饰器将替换 A
带有子类,子类将使原始 A
class 可用作名为 _orig
的类属性:
def class_decorator(cls):
class SubClass(cls):
_orig = cls
# add other stuff here?
return SubClass
您可以添加额外的逻辑来复制原始类的 __name__
和__doc__
如果你愿意的话,可以进入新类(class)。您还可以扭转逻辑,并添加 SubClass
作为 cls
的属性在返回未修改的 cls
之前.
关于python - 可以用装饰器劫持类定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45450740/