提示子类中属性的特定类型,其中父类可以有多种类型
Hinting specific types for attributes in subclasses where parent can have many types
我有一个父 class Foo,它有一个属性 bar。它有两个 subclasses,每个 bar 都是不同的类型:FooStr 有 bar 作为 str,FooInt 有 bar 作为 int。 Foo 是一个抽象基础 class.
如何在子class中提示属性的特定类型,其中父项可以有多种类型?
这就是我的起点。 subclasses FooStr 和 FooInt 的提示告诉我 bar 是 str 或 int 的联合,不是很有用。
class Foo(abc.ABC):
def __init__(self, bar: typing.Union[str, int], stuff):
self.bar = bar
self.stuff = stuff
class FooStr(Foo):
pass
class FooInt(Foo):
pass
接下来我尝试在 subclasses 的 init 方法中提示类型,但是在 subclasses 中提示 bar 仍然显示类型为联合。
class Foo(abc.ABC):
def __init__(self, bar: typing.Union[str, int], stuff):
self.bar = bar
self.stuff = stuff
class FooStr(Foo):
def __init__(self, bar: str, stuff):
super().__init__(self, bar, stuff)
class FooInt(Foo):
def __init__(self, bar: int, stuff):
super().__init__(self, bar, stuff)
然后我尝试从父 init 中删除 bar,它提示子 classes 的正确类型,但没有在父 class 中定义 bar 对我来说似乎不正确。
class Foo(abc.ABC):
def __init__(self, stuff):
self.stuff = stuff
class FooStr(Foo):
def __init__(self, bar: str, stuff):
self.bar = bar
super().__init__(self, stuff)
class FooInt(Foo):
def __init__(self, bar: int, stuff):
self.bar = bar
super().__init__(self, stuff)
不知道从这里去哪里...
使用 Generic
基础 class,然后您可以在子class 父 class
时传递变量类型
from typing import Generic, TypeVar
T = TypeVar('T')
class Foo(Generic[T]):
def __init__(self, bar: T, stuff):
self.bar = bar
self.stuff = stuff
class FooStr(Foo[str]):
pass
class FooInt(Foo[int]):
pass
我有一个父 class Foo,它有一个属性 bar。它有两个 subclasses,每个 bar 都是不同的类型:FooStr 有 bar 作为 str,FooInt 有 bar 作为 int。 Foo 是一个抽象基础 class.
如何在子class中提示属性的特定类型,其中父项可以有多种类型?
这就是我的起点。 subclasses FooStr 和 FooInt 的提示告诉我 bar 是 str 或 int 的联合,不是很有用。
class Foo(abc.ABC):
def __init__(self, bar: typing.Union[str, int], stuff):
self.bar = bar
self.stuff = stuff
class FooStr(Foo):
pass
class FooInt(Foo):
pass
接下来我尝试在 subclasses 的 init 方法中提示类型,但是在 subclasses 中提示 bar 仍然显示类型为联合。
class Foo(abc.ABC):
def __init__(self, bar: typing.Union[str, int], stuff):
self.bar = bar
self.stuff = stuff
class FooStr(Foo):
def __init__(self, bar: str, stuff):
super().__init__(self, bar, stuff)
class FooInt(Foo):
def __init__(self, bar: int, stuff):
super().__init__(self, bar, stuff)
然后我尝试从父 init 中删除 bar,它提示子 classes 的正确类型,但没有在父 class 中定义 bar 对我来说似乎不正确。
class Foo(abc.ABC):
def __init__(self, stuff):
self.stuff = stuff
class FooStr(Foo):
def __init__(self, bar: str, stuff):
self.bar = bar
super().__init__(self, stuff)
class FooInt(Foo):
def __init__(self, bar: int, stuff):
self.bar = bar
super().__init__(self, stuff)
不知道从这里去哪里...
使用 Generic
基础 class,然后您可以在子class 父 class
from typing import Generic, TypeVar
T = TypeVar('T')
class Foo(Generic[T]):
def __init__(self, bar: T, stuff):
self.bar = bar
self.stuff = stuff
class FooStr(Foo[str]):
pass
class FooInt(Foo[int]):
pass