【发布时间】:2023-03-19 03:03:01
【问题描述】:
我正在尝试继承 from ABC 和 ctypes.Structure,但我遇到了多重继承和元类错误。
我做错了什么?
我的代码如下:
from ctypes import *
from abc import ABC, abstractmethod, ABCMeta
class FinalMeta(ABCMeta, type(Structure)):
def __new__(mcs, name, bases, namespace, **kwargs):
print("FinalMeta.__new__(mcs, name, bases, namespace, **kwargs)")
print(" mcs =", mcs)
print(" name =", name)
print(" bases =", bases)
print(" namespace =", namespace)
print(" kwargs =", kwargs)
cls = super().__new__(mcs, name, bases, namespace, **kwargs)
print("<-- cls =", cls)
print()
return cls
class MessageBase(ABC, Structure, metaclass=FinalMeta):
def __init__(self, *args, **kwargs):
super().__init__()
@property
@abstractmethod
def format(self):
pass
错误:
File "D:\Development\messages.py", line 13, in __new__
cls = super().__new__(mcs, name, bases, namespace, **kwargs)
File "C:\Users\AppData\Local\Programs\Python\Python37-32\lib\abc.py", line 126, in __new__
cls = super().__new__(mcls, name, bases, namespace, **kwargs)
TypeError: _ctypes.PyCStructType.__new__(FinalMeta) is not safe, use type.__new__()**
【问题讨论】:
标签: python multiple-inheritance metaclass