170 похожих чатов

Есть у меня абстрактный классовый метод, который наследуется в реализациях

как есть:

class ABCModel(ABC):
@classmethod
@abstractclassmethod
def from_data(cls, data: dict) -> 'ABCModel':
return cls(**dict)

class ConcretModel(ABCModel):
@classmethod
def from_data(cls, data: dict) -> ABCModel:
return super().from_data(data)

И вот здесь меня просто порвало с работы mypy. Это говно откровенно доебался до сигнатуры метода в реализации, выдавая ошибку

Signature of "from_data" incompatible with supertype "ABCModel"

Почему все так дрочат на это поделие, если при совершенно одинаковых сигнатурах, оно очевидно выдает тупорылую ошибку на ровном месте? Я уже блядь не знаю что еще поправить надо, что бы по его мнению сигнатуры методов сходились

9 ответов

23 просмотра

Это магия типов питона, я даже не знаю че ответить ибо я сам до сих пор мучаюсь ведь это настолько тонкое говно что лучше ctypes уже тянуть

Ты бы еще тайпскрипт попробовал

Вообще у тебя как минимум дикт не типизирован, странно что майпай на это не ругается, мб хотя бы dict[Any, Any]

denis
Вообще у тебя как минимум дикт не типизирован, стр...

dict[Any, Any] == dict как по мне должен быть, хотя меня когда-то этот вопрос волновал, но я хуй положил

Tom-Cauf Автор вопроса

class ABCModel(ABC): @classmethod @abstractclassmethod def from_data(cls) -> 'ABCModel': return cls() class ConcretModel(ABCModel): @classmethod def from_data(cls) -> ABCModel: return super().from_data() Вот так выдает то же самое например

Tom Cauf
class ABCModel(ABC): @classmethod @abstrac...

Кстати как оно может вызывать абстрактный метод? Попробуй создать прослойку class Foo(ABCModel) class ConcertModel(Foo)

Tom-Cauf Автор вопроса
Tom Cauf
может. читай документацию

А, ну я почекал PEP8 там разрешено возвращать что либо из абстрактного метода

Tom-Cauf Автор вопроса
rgxNew
А, ну я почекал PEP8 там разрешено возвращать что ...

Ты ведь в курсе, что документация питона пеп8 не ограничена?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта