Pavel Anossov の (現在は削除された) コメントの使用:
class met(type):
def __init__(cls, name, bases, dct):
super(met, cls).__init__(name, bases, dct)
cls._test_member = "test_value"
object = met('object', (object,), {})
class A(object):
pass
print(A._test_member)
版画
test_value
クラスはメタクラスを 1 つしか持つことができないことに注意してください。(結局のところ、どのオブジェクトも 1 つのタイプしか持てないため)。さらに、クラスのメタクラスは、そのすべてのベースのメタクラスの (厳密ではない) サブクラスでなければなりません。つまり、クラスのメタクラスとそのすべてのベースのメタクラスが同じであるか、それらのメタクラスがすべて互いのサブクラスである必要があります。そのため、クラスが のサブクラスではないメタクラスを使用しようとすると、上記の解決策は機能しない可能性がありmet
ます。
例えば、
class met(type):
def __init__(cls, name, bases, dct):
super(met, cls).__init__(name, bases, dct)
cls._test_member = "test_value"
object = met('object', (object,), {})
class someothertype(type): pass
class B(object):
__metaclass__ = someothertype
上げる
TypeError: Error when calling the metaclass bases
metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases