元类中的额外参数

2024-09-30 04:29:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了以下元类:

class FieldHandlerBase(type):
    def __new__(cls, name, bases, dct, model):
        ...
        return super(FieldHandlerBase, cls).__new__(cls, name, bases, dct)

现在,我尝试使用上面的元类动态创建一个类:

^{pr2}$

但它给了我一个错误:

>           model=name)
E       TypeError: Error when calling the metaclass bases
E           type.__init__() takes no keyword arguments

我不明白为什么,因为我用正确数量的参数调用元类基(type,从FieldHandlerBase)中调用。我该怎么解决这个问题?我需要向FieldHandlerBase传递一个额外的参数,我不想将它包含到dct参数中,因为我只需要在元类级别使用它。在


Tags: namenew参数modelreturndeftypeclass
1条回答
网友
1楼 · 发布于 2024-09-30 04:29:57

您需要编写__init__方法和__new__方法。否则,python将为您的新类调用type.__init__,它不接受任何附加参数。在

例如

class FieldHandlerBase(type):

    def __init__(cls, name, bases, attrs, model):
        type.__init__(cls, name, bases, attrs)
        cls.model = model

    def __new__(metacls, name, bases, attrs, model):
        ...
        return type.__new__(metacls, name, bases, attrs)

class ExampleFieldHandler(FieldHandler, metaclass=FieldHandlerBase, 
        model="Example"):
    clsvar = "var"

# or 
ExampleFieldHandler = FieldHandlerBase(
    "ExampleFieldHandler",
    (FieldHandler,),
    {"clsvar": "var"},
    model="Example"
)

assert ExampleFieldHandler.model == "Example"

相关问题 更多 >

    热门问题