Создание объектов из класса /классов с различными фиксированными значениями, которые пользователь может легко расширять

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

Например, у меня есть следующий класс, который я написал в python:

class Fuel():
    def __init__(self, fuel_type, energy_density):
        self.fuel_type = fuel_type
        self.energy_density = energy_density

    def energy_output():
        return energy_density*100

Типы топлива могут представлять собой газ, уголь или масло с плотностью энергии 35,7, 24,0 и 43,37 соответственно.

Эти цифры не будут меняться при использовании в будущем. Тем не менее, кто-то может пожелать добавить дополнительный тип топлива через файл данных.

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

Приветствуется любая помощь по наилучшей практике.

1 голос | спросил AKE 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 06 Sep 2018 19:00:53 +0300 2018, 19:00:53

1 ответ


2

Если все экземпляры известны во время компиляции (ваши или потребляющие разработчики), вы должны создать свои хорошо известные примеры в качестве общеизвестных экземпляров или предложить для них статические заводские методы (в частности, если ваши объекты изменяемы).

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

Ваши разработчики-потребители могут свободно определять свои собственные известные значения где-то в другом месте.

Это статический способ (регистрация в коде).

Если, напротив, эти экземпляры (и новые) зависят от данных, известных только во время выполнения, вы можете создать FuelRegistry для регистрации предоставили объекты и получили их по их названию (возможно, тип топлива). Этот реестр может сохраняться или просто находиться в памяти.

Вы можете объединить эти подходы, добавив код, который предварительно заполняет ваш реестр стандартными экземплярами.

Это динамический способ.

ответил Hero Wanders 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 06 Sep 2018 20:19:30 +0300 2018, 20:19:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132