Перегруженный метод вызывы вызывает ошибку проверки типаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Перегруженный метод вызывы вызывает ошибку проверки типа

Сообщение Anonymous »

Я разместил вопрос ранее, спрашивая, как перегружать методы Python, используя Generics. < /p>
Представленное решение показано ниже. < /p>

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

from __future__ import annotations
from typing import Literal, overload

class WoodData: ...
class ConcreteData: ...

class Foo[T: Literal["wood", "concrete"]]:
def __init__(self, data_type: T) -> None:
self.data_type = data_type

@overload
def get_data(self: Foo[Literal["wood"]]) -> WoodData: ...

@overload
def get_data(self: Foo[Literal["concrete"]]) -> ConcreteData: ...

def get_data(self):
if self.data_type == "wood":
return WoodData()
return ConcreteData()

foo = Foo("concrete")
x = foo.get_data()
Этот пример работает, как и ожидалось, но проблема возникает, когда мы пытаемся вызвать get_data из метода класса братьев и сестер.
Например , Я добавляю метод BAR ниже.

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

from __future__ import annotations
from typing import Literal, overload

class WoodData: ...
class ConcreteData: ...

class Foo[T: Literal["wood", "concrete"]]:
def __init__(self, data_type: T) -> None:
self.data_type = data_type

@overload
def get_data(self: Foo[Literal["wood"]]) -> WoodData: ...

@overload
def get_data(self: Foo[Literal["concrete"]]) -> ConcreteData: ...

def get_data(self):
if self.data_type == "wood":
return WoodData()
return ConcreteData()

def bar(self):
self.get_data()
< /code>
Это дает ошибку печати: < /p>
Cannot access attribute "get_data" for class "Foo[T@Foo]*"
Could not bind method "get_data" because "Self@Foo[T@Foo]" is not assignable to parameter "self"
"Foo[T@Foo]*" is not assignable to "Foo[Literal['wood']]"
Type parameter "T@Foo" is covariant, but "T@Foo" is not a subtype of "Literal['wood']"
Type "Literal['wood', 'concrete']" is not assignable to type "Literal['wood']"
"Literal['concrete']" is not assignable to type "Literal['wood']"
Could not bind method "get_data" because "Self@Foo[T@Foo]" is not assignable to parameter "self"
"Foo[T@Foo]*" is not assignable to "Foo[Literal['concrete']]"
Type parameter "T@Foo" is covariant, but "T@Foo" is not a subtype of "Literal['concrete']"
Как я могу получить доступ к функции get_data из другого метода без получения ошибки печати?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Перегруженный метод вызывы вызывает ошибку проверки типа
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Почему метод Java с типом интерфейса не распознает этот перегруженный метод?
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Почему метод Java с типом интерфейса не распознает этот перегруженный метод?
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Tflite C ++ API вызывают вызывы о разломе сегментации
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Tflite C ++ API вызывают вызывы о разломе сегментации
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

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