【问题标题】:How to check type of a subclass using the parent class in python?如何使用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 循环是否有好的替代方案。

(欢迎任何代码重构)

【问题讨论】:

    标签: python-3.x inheritance python-class


    【解决方案1】:

    使用方法isinstance(token, Operator)

    这里是例子

    ar = Div()
    if isinstance(ar, Operator):
        print("true")
    

    【讨论】:

    • 是否可以做类似token is Operatortoken == 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2011-02-14
      • 2010-09-18
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多