我将为工程师编程一个计算器,该计算器允许根据结构的材质计算某些结构的特性。
我有一堆材料,每一种都有相同的设置属性(强度、密度等(
用户将输入一些特定于结构的特性(尺寸、位置等(,并根据这些特性和材料特性,计算器将输出结构的性能(例如各种应力、压力等(
存储材料特性的最佳方式是什么?现在我想我将使用一个包含一堆类的模块:
class Concrete_1:
strength=1
hardness=1.5
class Concrete_2:
strength=3
hardness=7
在所有的计算中,我可以用简单的方法来指代每种材料的性质,例如:
StructureProperty=properties.Concrete_1.strength*UserInput
你认为这是个好办法吗?我的目标不是一个伟大的代码,但我也想确保这不是一个愚蠢的想法。处理这种事情有什么聪明的方法。
如果没有太多上下文,我建议您选择这种解决方案:
class Material:
strength = None
hardness = None
@classmethod
def calculate_strength_related_property(cls, user_input):
return user_input * cls.strength
class Concrete1(Material):
strength = 1
hardness = 2
class Concrete2(Material):
strength = 3
hardness = 4
定义一个超级类,它可以通过用户输入进行所需的所有计算(我刚刚做了一个非常简单的例子(,并返回Structure Properties所需的信息。然后,您可以像以前一样创建新的"材质"子类并定义它们的特性。通过将其定义为类方法,可以避免实例化只包含常量的材质。
一个使用示例是:
structure_property = Concrete1.calculate_strength_related_property(user_input)
你提出的解决方案肯定会奏效,我个人认为这并不是错误的,但我相信这种方法有点花哨。
注意:Material类中的属性定义是不必要的,但我认为如果每个子类都共享它们,那么在那里有它们就很好了。