如何使用python中的父类检查子类的类型?
Posted
技术标签:
【中文标题】如何使用python中的父类检查子类的类型?【英文标题】:How to check type of a subclass using the parent class in python? 【发布时间】:2021-07-27 18:54:33 【问题描述】:假设我有五个这样的类:
class Operator:
def __init__(self):
pass
class Pow(Operator):
pass
class Mul(Operator):
pass
class Div(Operator):
pass
class Add(Operator):
pass
class Sub(Operator):
pass
还有一个标记数组,其中一些是数字,另一些是从 Pow, Mul, Div, Add, Sub 上面的类实例化的对象。
当我遍历数组时,我希望能够像这样检查令牌的类型:
for token in tokens:
if type(token) is Operator:
# do something
不要这样做:
for token in tokens:
if type(token) in [Pow, Mul, Div, Add, Sub]:
# do something
我不知道第二个 for 循环是否有好的替代方案。
(欢迎任何代码重构)
【问题讨论】:
【参考方案1】:使用方法isinstance(token, Operator)
这里是例子
ar = Div()
if isinstance(ar, Operator):
print("true")
【讨论】:
是否可以做类似token is Operator
或token == Operator
的事情?
不,命令 type()
返回类名(如 Div 等)。您可以通过以下方式使用issubclass
方法将其混合:if issubclass(type(token), Operator)
但其丑陋且与isinstance
相同。如果你需要==
或is
,我想到的唯一方法就是做这样的事情token.__class__.__base__ == Operator
。 _class__
方法返回类(例如DIV),__base__
返回父类。【参考方案2】:
for token in tokens:
if isinstance(token, Operator):
# do something
【讨论】:
以上是关于如何使用python中的父类检查子类的类型?的主要内容,如果未能解决你的问题,请参考以下文章
Python入门精华-OOP调用父类的方法及MRO方法解析序列