Я пытаюсь внедрить шаблон проектирования завода (Python 3.12+), и у меня возникают проблемы со счетом своей заводской подписи. Может быть, то, что я пытаюсь сделать, не общепринято, и я должен искать другой шаблон дизайна.from typing import ParamSpec, TypeVar
P = ParamSpec("P")
T = TypeVar("T")
class Base:
@classmethod
def factory(cls, *args:P.args, **kwargs:P.kwargs):
def f(parent):
return cls(parent, *args, **kwargs)
return f
class CustomA(Base):
def __init__(self, parent:str, arg1:int, arg2:int):
print(f"Instantiate CustomA with arg {parent}, {arg1}, {arg2}")
#Ideally I would like this method signature to match the CustomA constructor signature
#without the parent argument
test = CustomA.factory(1, 2)
print(test) #Does correctly return a method
a = test("parent")
print(a) # That when is called return the object correctly instantiate
< /code>
В моем случае использование я хотел бы частично подготовить вызов метода для создания объекта, пропуская для этого параметр. Позже я завершил бы этот частичный вызов, чтобы фактически создать объект. Для этого я внедрил метод заводского строителя в родительском классе, который позволил бы мне легко реализовать эту функцию во всех моих детских классах. Приведенный выше код работает нормально, но я теряю подпись и, следовательно, IDE Intellisense для конструктора подкласса. Может быть, другой подход, использующий метод нового , или декоратор был бы более подходящим? У меня не было успеха до сих пор с этим другим подходом.
Подробнее здесь: https://stackoverflow.com/questions/796 ... -signature
Заводской заводской заводчик с правильной подписью ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение