我正在为土木工程编程一个计算器,它根据用户的输入(例如:建筑物的高度和材料属性)来计算建筑物的属性。它根据用户的输入(例如:建筑物的高度)和材料属性来计算建筑物的属性。
我正在使用一堆子类来存储单个材料的属性。在它们之上有一个类,其中有类方法,用于使用材料属性和用户输入的计算。
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':
这条语句总是假的
那么如何才能让这个比较正确地完成呢?
你应该使用issubclass()内置函数,如下图。
@classmethod
def CalculateDurability(cls, userInput):
if issubclass(cls,Concrete_1):
output = cls.hardness * userInput
else:
output = cls.density * userInput
print(output)