Python-Cheatsheet/less8.md

2.9 KiB
Raw Blame History

Ссылка на урок

Наследование в Python Создадим базовый класс “Справочник”

from random import randint from uuid import uuid4

Наследование

class Catalog:

def get_object(self):
    print("Получаем из базы: {}".format(self.__class__.__name__))

def write(self):
    print("Записываем в базу: {}".format(self.__class__.__name__))

def delete(self):
    print("Удаляем из базы: {}".format(self.__class__.__name__))

@staticmethod
def search_by_ref(ref):
    return "Ищем в базе по ссылке {}".format(ref)

Создадим класс “Справочники” с инициализацией экземпляра класса необходимыми атрибутами объекта и наследуемся от класса “Справочник”

class Catalogs(Catalog):

def __init__(self, description=''):
    self.code = randint(1, 1000)
    self.description = description
    self.deletion_mark = False
    self.ref = uuid4()

def __str__(self):
    return "Код {} Наименование {} Ссылка {}".format(self.code, self.description, self.ref)

Создадим 2 класса “Товары” и “Партнеры”. Оба наследуются от “Справочники”. В классах добавляем необходимые реквизиты для этих видов и при необходимости переопределяем методы родительских классов.

class Products(Catalogs):

def __init__(self, description=''):
    super(Products, self).__init__(description)
    self.image = None

def write(self):
    # Можно проверить на корректность введеных данных
    if self.image is not None:
        super().write()
    else:
        print("Обязательно добавьте изображение")

class Partner(Catalogs):

def __init__(self):
    super(Partner, self).__init__()
    self.inn = ""
    self.kpp = ""

Примеры создания экземпляров классов

table = Products('Стол дуб') print(table) table.write()

table2 = Products() table2.description = 'Стол сосна' table2.image = 'Изображение' print(table2) table2.write()

ooo_mayak = Partner() ooo_mayak.description = 'ООО Маяк' ooo_mayak.inn = '123' ooo_mayak.kpp = '465768' print(ooo_mayak) ooo_mayak.write() Пример вызова статического метода класса

print(Catalog.search_by_ref('734235ee-b821-4467-a905-ffb5a86a2ab0'))

Вернуться на главную