Хорошая практика - переопределить абстрактный метод с более специализированной подписью?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Хорошая практика - переопределить абстрактный метод с более специализированной подписью?

Сообщение Anonymous »

Справочная информация ниже вопроса. Я знаю, что это работает, но, как и многие вещи, работают во многих языках программирования, это может быть не хорошая практика. Так что это?

Код: Выделить всё

from abc import ABC, abstractmethod

class Base(ABC):
@abstractmethod
def foo(self, *args, **kwargs):
raise NotImplementedError()

class Derived(Base):
def foo(self, a, b, *args, **kwargs):
print(f"Derived.foo(a={a}, b={b}, args={args}, kwargs={kwargs})")

d = Derived()
d.foo(1, 2, 3, "bar", baz="baz")

# output:
# Derived.foo(a=1, b=2, args=(3, 'bar'), kwargs={'baz': 'baz'})
< /code>
 это хорошая или плохая практика? Он возвращает какую -то ручку. Специализированные реализации всегда должны быть в состоянии возвращать своего рода ручку по умолчанию, если метод вызывается без каких -либо дополнительных аргументов. Тем не менее, они могут определить определенные флаги, чтобы настроить ручку на случай использования вызывающего абонента. В этом случае вызывающий абонент также является тем, который создал создание специализированной реализации и знает об этих флагах. Общий код, работающий только на интерфейсе или ручках, не знает об этих флагах, но не нужно.from abc import ABC, abstractmethod

class Manager(ABC):
@abstractmethod
def connect(self, *args, **kwargs):
raise NotImplementedError()

class DefaultManager(Manager):
def connect(self, *, thread_safe: bool = False):
if thread_safe:
return ThreadSafeHandle()
else:
return DefaultHandle()
Это специфично для моего варианта использования, что реализация Manager может захотеть выпустить различные реализации ручек, специфичные для использования абонента. Менеджеры определяются в одном месте в моем коде, и вызывающие абоненты могут иметь или не иметь специализированных потребностей, таких как безопасность потоков в примере, для менеджеров, которые они используют.

Подробнее здесь: https://stackoverflow.com/questions/795 ... ed-signatu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»