gpt4 book ai didi

python - 可以用装饰器劫持类定义吗?

转载 作者:行者123 更新时间:2023-11-28 21:40:36 26 4
gpt4 key购买 nike

假设我有一个

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类可用作名为 _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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com