MyPy -Fehler, [Typ] hat kein Attribut [Methode]Python

Python-Programme
Anonymous
 MyPy -Fehler, [Typ] hat kein Attribut [Methode]

Post by Anonymous »

Ich habe eine abstrakte Basisklasse: < /p>

Code: Select all

import abc
import typing as t

class Parent1(abc.ABC):
...
< /code>
und eine Unterklasse dieser abstrakten Basisklasse, das selbst eine abstrakte Basisklasse ist: < /p>
class Parent2(Parent1):

@abc.abstractmethod
def method2(self) -> None:
...

Und jetzt eine konkrete untergeordnete Klasse, die von parent2 abstrakte Klasse erbt:

Code: Select all

class Child1(Parent2):

def method2(self) -> None:
pass
und eine andere konkrete untergeordnete Klasse, die von Parent1 Klasse erbt:

Code: Select all

class Child2(Parent1):
pass
Jetzt versuche ich, einen generischen Container zu erstellen, der alle Instanzen von Parent1 Klasse
enthält

Code: Select all

T = t.TypeVar("T")

class Container(t.Generic[T]):

def __init__(self) -> None:
self._containers: t.Dict[str, T] = {}

def add_item(self, name: str, item: T) -> None:
# reveal_type(item)
self._containers[name] = item

def get_item(self, name: str) -> T:
return self._containers[name]
< /code>
container: Container[Parent1] = Container()

container.add_item("child1", Child1())
container.add_item("child2", Child2())
< /code>
child1 = container.get_item("child1")
# assert isinstance(child1, Child1)
# reveal_type(child1) # Revealed type is "generic1.Parent1"

child1.method2()
# t.cast(Child1, child1).method2()
< /code>
When trying to run mypy --strict
ohne Assert isInstance oder gegossen meldet einen Fehler, der besagt, dass

Code: Select all

error: "Parent1" has no attribute "method2"

So beheben Sie das Problem ohne Verwendung von Assert ISInstance oder typing.cast oder auch ohne den # Typ: Ignore Kommentar?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post