Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 29, 2019 23:20:47

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

оба ли примера соответствуют принципу открытости/закрытости?

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

суть примеров в том, что нужно сгенерировать двигатели в количестве, которое вводит пользователь

вот первый пример:

 import random
PETROL_TYPE = 'petrol'
ELECTRO_TYPE = 'electro'
PETROL_WEIGHT = 100
ELECTRO_WEIGHT = 50
class Engine:
    def __init__(self, type, weight):
        self.serial_num = random.randint(1000000, 9999999)
        self.type = type
        self.weight = weight
    def __repr__(self):
        return '<Engine: {}/{}>'.format(self.type, self.weight)
print('сколько двигателей типа pertol загрузить на склад?')
petrolEngineCnt = input()
petrolEngineSet = []
for i in range(int(petrolEngineCnt)):
    engine = Engine(PETROL_TYPE, PETROL_WEIGHT)
    petrolEngineSet.append(engine)
print('сколько двигателей типа electro загрузить на склад?')
electroEngineCnt = input()
electroEngineSet = []
for i in range(int(electroEngineCnt)):
    engine = Engine(ELECTRO_TYPE, ELECTRO_WEIGHT)
    electroEngineSet.append(engine)
print(petrolEngineSet)
print(electroEngineSet)

вот второй пример:
 import random
from abc import ABCMeta, abstractmethod
class IEngine(metaclass=ABCMeta):
    @abstractmethod
    def get_type(self):
        pass
    @abstractmethod
    def get_weight(self):
        pass        
class PetrolEngine(IEngine):
    def __init__(self):
        self.type = 'petrol'
        self.weight = 100
    def get_type(self):
        return self.type
    def get_weight(self):
        return self.weight
    def __repr__(self):
        return '<Engine_raw: {}/{}>'.format(self.type, self.weight)
class ElectroEngine(IEngine):
    def __init__(self):
        self.type = 'electro'
        self.weight = 50
    def get_type(self):
        return self.type
    def get_weight(self):
        return self.weight
    def __repr__(self):
        return '<Engine_raw: {}/{}>'.format(self.type, self.weight)        
class Engine:
    def __init__(self, engine):
        self.serial_num = random.randint(1000000, 9999999)
        self.type = engine.get_type()
        self.weight = engine.get_weight()
    def __repr__(self):
        return '<Engine: {}/{}>'.format(self.type, self.weight)
from app.classes.engine import *
print('сколько двигателей типа pertol загрузить на склад?')
petrolEngineCnt = input()
petrolEngineSet = []
for i in range(int(petrolEngineCnt)):
    engine = Engine(PetrolEngine())
    petrolEngineSet.append(engine)
print('сколько двигателей типа electro загрузить на склад?')
electroEngineCnt = input()
electroEngineSet = []
for i in range(int(electroEngineCnt)):
    engine = Engine(ElectroEngine())
    electroEngineSet.append(engine)
print(petrolEngineSet)
print(electroEngineSet)

работают они одинаково. я понимаю, что примеры дикие, но мне важно разобраться в вопросе

Офлайн

#2 Апрель 30, 2019 02:35:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

оба ли примера соответствуют принципу открытости/закрытости?

zlodiak
какой из них больше соответствует принципу открытости/закрытости
А ты сам принцип понял?

wiki. SOLID. OCP

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



Отредактировано py.user.next (Апрель 30, 2019 02:37:15)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version