TGViewer
Machine learning Interview Machine learning Interview @machinelearning_interview · 30.4K subscribers
Post #452 4.92K
👆 Принципы SOLID в инженерии данных. Часть 1.

SOLID — это набор основных принципов процесса разработки ПО, направленных на упрощение чтения, тестирования и сопровождения кода.

Как расшифровывается SOLID

Акроним SOLID расшифровывается так:

• Single responsibility principle («Принцип единственной ответственности»).
• Open/close principle («Принцип открытости/закрытости»).
• Liskov substitution principle («Принцип подстановки Лисков»).
• Interface segregation principle («Принцип разделения интерфейса»).
• Dependency inversion principle («Принцип инверсии зависимостей).

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

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

а) нарушение принципа:
class BankAccount:
def __init__(self, account_number: int, balance: float):
self.account_number = account_number
self.balance = balance

def deposit_money(self, amount: float):
self.balance += amount

def withdraw_money(self, amount: float):
if amount > self.balance:
raise ValueError("Unfortunately your balance is insufficient for any withdrawals right now ... ")
self.balance -= amount

def print_balance(self):
print(f'Account no: {self.account_number}, Balance: {self.balance} ')

def change_account_number(self, new_account_number: int):
self.account_number = new_account_number
print(f'Your account number has changed to "{self.account_number}" ')

Принцип нарушается, поскольку классом BankAccount контролируется больше одной задачи, связанной с банковскими счетами: управление профилями счетов и управление денежными средствами.

б) соблюдение принципа:

А вот пример соблюдения принципа:
class DepositManager:
def deposit_money(self, account, amount):
account.balance += amount


class WithdrawalManager:
def withdraw_money(self, account, amount):
if amount > account.balance:
raise ValueError("Unfortunately your balance is insufficient for any withdrawals right now ... ")
account.balance -= amount


class BalancePrinter:
def print_balance(self, account):
print(f'Account no: {account.account_number}, Balance: {account.balance} ')


class AccountNumberManager:
def change_account_number(self, account, new_account_number):
account.account_number = new_account_number
print(f'Your account number has changed to "{account.account_number}" ')


class BankAccount:
def __init__(self, account_number: int, balance: float):
self.account_number = account_number
self.balance = balance
self.deposit_manager = DepositManager()
self.withdrawal_manager = WithdrawalManager()
self.balance_printer = BalancePrinter()
self.account_number_manager = AccountNumberManager()

def deposit_money(self, amount: float):
self.deposit_manager.deposit_money(self, amount)

def withdraw_money(self, amount: float):
self.withdrawal_manager.withdraw_money(self, amount)

def print_balance(self):
self.balance_printer.print_balance(self)

def change_account_number(self, new_account_number: int):
self.account_number_manager.change_account_number(self, new_account_number)

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

в) пример расширения кодовой базы:

🔘 Продолжение части 1
🔘 Часть 2
🔘 Часть 3

@machinelearning_interview
  • 👍 16
  • ❤ 4
  • 🔥 2
More from @machinelearning_interview
  1. Oct 18, 2026🤖 Маск: госдолг США спасут роботы и ИИ. Сэкономить не получилось В интервью Уолтеру Айзек…
  2. Oct 18, 2026🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку Окружение решает больше, чем кажет…
  3. Oct 18, 2026🏗 Обещал дата-центр для Gemini. Google заявила, что не участвует The Guardian обнаружила…
  4. Oct 17, 2026🔥 Полный гайд по локальному запуску DeepSeek на русском: от домашнего ПК до сервера с 8 G…
  5. Oct 16, 2026🦥 816 млрд параметров на Mac Studio: Unsloth выпустила GGUF для Muse Spark Open Модель по…
  6. Oct 16, 2026🔥 Модель на 125 млрд параметров на игровой видеокарте с 12 ГБ памяти. Strata позволяет за…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →