在一个类中,有很多子类的情况下,如何在类方法里面比较cls?

问题描述 投票:0回答:1

我正在为土木工程编程一个计算器,它根据用户的输入(例如:建筑物的高度和材料属性)来计算建筑物的属性。它根据用户的输入(例如:建筑物的高度)和材料属性来计算建筑物的属性。

我正在使用一堆子类来存储单个材料的属性。在它们之上有一个类,其中有类方法,用于使用材料属性和用户输入的计算。

HOWEVER某个属性(我们称它为鲁棒性)的计算方式有两种,取决于使用的是哪种材料。我想有一个 单一 函数来计算所有材料的鲁棒性。

我的代码如下。

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':

这条语句总是假的

那么如何才能让这个比较正确地完成呢?

python class inheritance subclass
1个回答
0
投票

你应该使用issubclass()内置函数,如下图。

@classmethod
def CalculateDurability(cls, userInput):
    if issubclass(cls,Concrete_1):
        output = cls.hardness * userInput
    else:
        output = cls.density * userInput
    print(output)
© www.soinside.com 2019 - 2024. All rights reserved.