如何比较 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)
我正在编写土木工程计算器。它根据用户输入(例如建筑物的高度)和 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)