typing import Protocol
class Test(Protocol):
@property
@abstractmethod
def text(self):
"""Text!"""
@abstractmethod
def meow(self):
"""Meow method!"""
class TestChild(Test):
text = 1
def meow(self):
print('meow')
mypy не ругается
бажный он
что за приколы я только-только стал юзать нормально хинты и тут вот буквально на каждом шаге такое
Надо видимо в youtrack идти, это именно с Protocol'ом дичь происходит
алсо а это нормально вообще что у тебя в протоколе абстрактные методы и проперти?
хороший вопрос но я не знаю как мне сделать такую вещь без протокола: мне нужно указать хинт вида objects: Iterable[MainClass], который будет означать что на вход подается Iterable классов наследников MainClass.. вот поэтому и заюзал Protocol я неправильно понял его суть?
TL;DR вот баг пичарма еще один https://t.me/ru_python_beginners/2040271
Если взять абстракный класс и абстрактное проперти, то это все будет относительно работать
а как мне указать тогда что у наследника должен быть реализован некий атрибут класса?
Абстрактное проперти
депрекейтед ж
ну так вместо него надо юзать обычную проперти и абстрактметод же
Так депрекейтнут сам декоратор, сейчас его можно сделать через @abstaractmethod и @property только я порядок не помню
на уровне тайпхинтов \ протоколов или абстрактных классов?
абстрактых классов
Ну вот у меня так и сделано сейчас, как и сказал алекс
Какая разница наследник или нет. Атрибуты то у них одинаковые а что там дальше тебе фиолетово
Да хрен его знает что у него в голове
Ух.. я бы так сделал class Test(Protocol): text: str def meow(self): """Meow method!""" class TestChild: text = "text" def meow(self): print("meow") def somefunc(t: Test): print(t)
Обсуждают сегодня