【问题标题】:Best way to store material properties in Python material calculator?在 Python 材料计算器中存储材料属性的最佳方法?
【发布时间】:2020-04-23 13:23:16
【问题描述】:

我即将为工程师编写一个计算器,该计算器允许根据构建的材料计算某些结构的属性。

我有一堆材料,每种材料都有相同的设置属性(强度、密度等)

用户将输入一些特定于结构的属性(尺寸、位置等),然后根据这些属性和材料属性,计算器将输出结构的属性(例如各种应力、压力等)

存储材料属性的最佳方式是什么?现在我想我会使用一个包含一堆类的模块:

class Concrete_1:
      strength=1
      hardness=1.5
class Concrete_2:
      strength=3
      hardness=7

那种方式 在所有计算中,我可以使用简单的方式来引用每个材料属性,例如:

StructureProperty=properties.Concrete_1.strength*UserInput

你认为这是一个好方法吗?我的目标不是代码的杰作,但我也想确保这不是一个愚蠢的想法。有什么聪明的方法来处理这种事情。

【问题讨论】:

  • 你的类的实例呢?例如concrete = Material(1, 1.5)
  • @Justlearnedit 我不确定从长远来看是否方便存储和编辑。每种类型的混凝土都有很多特性,而不仅仅是强度和硬度,所以最终它会是这样的:Concrete_1=Material(5,42,6,1,7,523,5.......... ) Concrete_2=Material(4,21,6,33,7,242,6.......) 所以不容易阅读和维护一个整洁的材料档案。
  • 确信 :) 课程看起来也更好

标签: python python-3.x variables global-variables


【解决方案1】:

如果没有太多上下文,我建议您寻求这种解决方案:

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

定义一个超类,通过用户输入进行您需要的所有计算(我只是做了一个非常简单的示例)并返回您的结构属性所需的信息。然后,您可以像以前一样创建新的 Material 子类并定义它们的属性。通过将其定义为类方法,您可以避免实例化仅包含常量的材料。

一个使用示例是:

structure_property = Concrete1.calculate_strength_related_property(user_input)

您提出的解决方案肯定行得通,我个人认为没有错误,但我相信这种方法有点花哨。

注意: Material 类中的属性定义不是必需的,但我认为如果每个子类都共享它们,那么将它们放在那里会很好。

【讨论】:

  • 非常整洁!它确实可以使其余的代码更简单。好建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 2018-11-03
  • 1970-01-01
  • 2019-02-28
  • 2015-04-17
  • 1970-01-01
相关资源
最近更新 更多