Python中没有抽象方法的抽象数据类:禁止实例化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中没有抽象方法的抽象数据类:禁止实例化相关的知识,希望对你有一定的参考价值。
即使类从ABC
继承,看起来它仍然可以实例化,除非它包含抽象方法。
具有下面的代码,防止创建Identifier
对象的最佳方法是什么:Identifier(['get', 'Name'])
?
from abc import ABC
from typing import List
from dataclasses import dataclass
@dataclass
class Identifier(ABC):
sub_tokens: List[str]
@staticmethod
def from_sub_tokens(sub_tokens):
return SimpleIdentifier(sub_tokens) if len(sub_tokens) == 1 else CompoundIdentifier(sub_tokens)
@dataclass
class SimpleIdentifier(Identifier):
pass
@dataclass
class CompoundIdentifier(Identifier):
pass
如果已经回答了这个问题,我事先表示歉意。似乎很基本,但是由于某种原因我找不到答案。
欢呼声,Hlib。
答案
我发现的最简单的方法是在__post_init__
方法中检查对象的类型:
@dataclass
class Identifier(ABC):
...
def __post_init__(self):
if self.__class__ == Identifier:
raise TypeError("Cannot instantiate abstract class.")
...
以上是关于Python中没有抽象方法的抽象数据类:禁止实例化的主要内容,如果未能解决你的问题,请参考以下文章