python中abcmeta_Python – 如何继承ABCMeta

python中abcmeta_Python – 如何继承ABCMeta通常 要对一个类进行子类化 我会做类似的事情 class Subby Parenty def init self Parenty init self 但是现在我试图继承一个元类 特别是 ABCMeta 所以我正在做 import ABCMeta class Subby ABCMeta def

大家好,我是讯享网,很高兴认识大家。

通常,要对一个类进行子类化,我会做类似的事情

class Subby(Parenty):

def __init__(self):

Parenty.__init__(self)

但是现在我试图继承一个元类,特别是ABCMeta,所以我正在做

import ABCMeta

class Subby(ABCMeta):

def __init__(self):

ABCMeta.__init__(self) #this never seems to run

def __new__(mcls, name, bases, namespace):

cls = ABCMeta.__new__(mcls, name, bases, namespace)

return cls


讯享网

但是,当我再尝试继承Subby像元类

class newClass(metaclass=Subby):

pass

我收到错误TypeError:__init __()接受1个位置参数,但给出了4个.

这是为什么,以及如何继承ABCMeta是否正确?

解决方法:

从数据模型:

If __new__() returns an instance of cls, then the new instance’s __init__() method will be invoked like __init__(self[, ...]), where self is the new instance and the remaining arguments are the same as were passed to __new__().

因此,正如@ user所说,签名必须匹配.

尽管如此,如果您只是想创建一个ABC,实际上没有理由定义__init__和__new__.只需创建它,然后使用.register注册符合条件的类. (可选)创建多个抽象方法和一个用于检查一致性的__subclasshook__. abc module documentation中已经存在一个很好的例子.

标签:python-3-x,subclass,metaclass,python

来源: https://codeday.me/bug/20191111/2019550.html

小讯
上一篇 2025-03-30 20:28
下一篇 2025-01-05 18:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/22902.html