在Python 3中,我想编写一个只能用作mixin的类。有没有办法阻止直接创建它?
这是一个简单的具体例子:
class EqMixin:
def __eq__(self, other):
return type(self) == type(other) and self.__dict__ == other.__dict__
def __hash__(self):
return hash(tuple(sorted(self.__dict__.items())))
但是,我想允许
class Bar(EqMixin):
...
不允许
foo = EqMixin()
怎么做?
注意:我不能在EqMixin的__init__
中引发异常,因为__init__
可能会调用__init__
。
注意:我不想要一个抽象的基类(或者至少,我不想将任何抽象方法放入我的mixin中)。
答案 0 :(得分:0)
听起来你想要创建一个abstract base class。也许使用abc
模块?只要该类上至少有一个抽象方法未被覆盖,该类就无法实例化。
答案 1 :(得分:0)
也许会这样:
>>> class MustBeMixed(object):
... def __init__(self):
... if self.__class__ == MustBeMixed:
... raise TypeError
>>> MustBeMixed()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
TypeError
用法:
>>> class Defuse(MustBeMixed):
... def __init__(self):
... super().__init__()
<__main__.Defuse object at 0x1099f8990>