如何比较 class 方法内部的 cls,在 class 中与许多 subclasses 一起工作?

How to compare cls inside of a classmethod, in a class that works with many subclasses?

我正在编写土木工程计算器。它根据用户输入(例如建筑物的高度)和 material 属性计算建筑物属性。

我正在使用一堆子classes 来存储单个materials 的属性。在它们之上有一个 class 和 class 方法,用于使用 material 属性和用户输入的计算。

然而,某些 属性(我们称其为鲁棒性)以两种不同的方式计算,具体取决于使用哪种 material。我想要一个 single 函数来计算所有 material 的稳健性。

我的代码如下所示:

class Material:
    hardness = None
    density = None


    @classmethod
    def CalculateDurability(cls, userInput):
        if cls == '__main__.Concrete_1':
            output = cls.hardness * userInput
        else:
            output = cls.density * userInput
        print(output)



class Concrete_1(Material):
    hardness = 1
    density = 2


class Concrete_2(Material):
    hardness = 3
    density = 4


input = 1
Concrete_1.CalculateDurability(input)
Concrete_2.CalculateDurability(input)

输出为:

2
4

但应该是:

1
4

问题显然出自这里:

if cls == '__main__.Concrete_1':

这个说法总是错误的。

那么我怎样才能正确完成这个比较呢?

你应该使用 issubclass() 内置函数,如下所示:

@classmethod
def CalculateDurability(cls, userInput):
    if issubclass(cls,Concrete_1):
        output = cls.hardness * userInput
    else:
        output = cls.density * userInput
    print(output)