在python中使用attr模块和元类

问题描述 投票:0回答:1

我正在尝试使用attr包来简单地创建一个具有属性和方法的元类,以便在Py 3的进一步的类定义中使用。我想使用attrs包,因为我有很多简单的存储类,只需要一个init的属性很少。一切正常,除了当我尝试将元类添加到主类中时,代码失败,并带有

TypeError: __init__() takes from 1 to 2 positional arguments but 4 were given

简单的MWE为:

from attr import attrs, attrib
from abc import ABCMeta

@attrs
class MetaClass(ABCMeta):

    my_attribute = attrib()

    def my_method(self):
        pass

class MyClass(object, metaclass=MetaClass):
    pass

为了实现py2 / 3的兼容性,我通常在其中使用六个包和add_metaclass装饰器,但是如果它可以在Py 2或3中使用,我会很高兴。

python python-3.x python-2.7 metaclass python-attrs
1个回答
0
投票

attrs库确实为其要装饰的类生成了一个__init__方法。但是,元类对__new____init__方法具有明确定义的签名,每当执行class语句时(由其主体提供),其参数将由Python运行时本身填充。

© www.soinside.com 2019 - 2024. All rights reserved.