Как ввести подсказку для атрибута, которому можно присвоить значение супертипа?Python

Программы на Python
Anonymous
Как ввести подсказку для атрибута, которому можно присвоить значение супертипа?

Сообщение Anonymous »

Я работаю с библиотекой C++, созданной для Python.
Библиотека определяет классы, каждый из которых имеет множество атрибутов, аналогичных стандартным типам Python, но с несколькими дополнительными методами. например, в заглушках Python «String» наследуется от стандартного «str»

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

class String(str):
def get_key(self) -> str:
"""Return the key for this property."""
...
и тогда класс может иметь атрибуты типа «String», например

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

class Asset:
name: String = ''
...
Код C++ поддерживает получение и установку значений этих атрибутов с использованием обычных типов Python. Так что я могу

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

my_asset.name = 'Foo'
print(my_asset.name) # Foo
print(type(my_asset.name))  # String
print(my_asset.name.get_key())  # name
Однако проверке типов Python (в данном случае Pylance) не нравится первая строка выше. Там написано:

Невозможно присвоить атрибуту "имя" для класса "Актив".
"str" ​​несовместим с " String" PylancereportAttributeAccessIssue
(переменная) имя: str

Есть ли способ изменить мои заглушки Python таким образом что специалисты по проверке типов поймут, что String совместим с str, а не просто наследуется от него?

Подробнее здесь: https://stackoverflow.com/questions/787 ... super-type

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