luc*_*ald 19 python generics typing python-3.x
我当前的类型注释看起来类似于以下内容,我想使用类型别名来避免重复太多:
类具有类变量,可以是:
class Foo(object):
state: ClassVar[Union[str, Callable[[SomeObject], str]]] # str or func->str
number: ClassVar[Union[int, Callable[[SomeObject], int]]] # int or func->int
foobar: ClassVar[Union[bool, Callable[[SomeObject], bool]]] # bool or func->bool
# end class
Run Code Online (Sandbox Code Playgroud)
为了完整起见,这里是一个示例实现:
class FooBar(Foo):
state = "something"
number = lambda x: int(x.bla)
@classmethod
def foobar(cls, x):
return x.blabla == cls.state
# end def
# end class
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何制作可订阅的泛型。我正在寻找类似的东西:
ClassValueOrCallable = lambda T: ClassVar[Union[T, Callable[[SomeObject], T]]]
class Foo(object):
state: ClassValueOrCallable(str)
number: ClassValueOrCallable(int)
foobar: ClassValueOrCallable(bool)
Run Code Online (Sandbox Code Playgroud)
编辑:
按照mypy 的泛型类型别名部分,似乎应该可以将其写为
T = TypeVar('T') # Any type.
ClassValueOrCallable = ClassVar[Union[T, Callable[[SomeObject], T]]]
class Foo(object):
state: ClassValueOrCallable[str]
number: ClassValueOrCallable[int]
foobar: ClassValueOrCallable[bool]
Run Code Online (Sandbox Code Playgroud)
Vic*_*uiz 14
这应该有效:
from typing import *
T = TypeVar('T') # Any type.
ValueOrCallable = Union[T, Callable[..., T]]
class Foo(object):
state: ClassVar[ValueOrCallable]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11168 次 |
| 最近记录: |