Лучший способ сохранить свойства материала в калькуляторе Python? - PullRequest
2 голосов
/ 23 апреля 2020

Я собираюсь запрограммировать калькулятор для инженеров, который позволяет рассчитывать некоторые свойства конструкции на основе того, из какого материала она построена.

У меня есть куча материалов, и у каждого из них одинаковые заданные свойства (прочность, плотность и т. д. c.)

. Пользователь введет некоторые свойства c, определяемые структурой (размер, положение и т. д. c.), и, исходя из этого и свойств материалов, калькулятор будет выведите свойства конструкции (например, различные напряжения, давления и т. д. c.)

Как лучше всего сохранить свойства материала? Сейчас я думаю, что я буду использовать модуль с кучей классов:

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

таким образом. Во всех вычислениях я могу использовать простой способ ссылки на каждое свойство материала, например:

StructureProperty=properties.Concrete_1.strength*UserInput

Как вы думаете, это хороший способ? Я не стремлюсь к шедевру кода, но также хочу убедиться, что это не глупая идея. Каковы умные способы борьбы с такой вещью.

1 Ответ

1 голос
/ 23 апреля 2020

Без особого контекста я бы порекомендовал вам go для решения такого рода:

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)

Предлагаемое вами решение определенно будет работать, и я бы лично сказал, не является неправильным , но я полагаю, что этот подход немного сложнее.

ПРИМЕЧАНИЕ: Определение атрибута в классе материалов не является необходимым, но я думаю, что если каждый подкласс разделяет их, приятно иметь их там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...