在this pull request中,似乎添加了对描述符的类型提示支持。
但是似乎没有发布任何最终的“正确”用法示例,也似乎没有向typing
module或Mypy添加任何文档。
看起来 的正确用法类似于this:
from typing import TypeVar
T = TypeVar('T')
V = TypeVar('V')
class classproperty():
def __init__(self, getter: Callable[[Type[T], V]) -> None:
self.getter = getter
def __get__(self, instance: Optional[T], owner: Type[T]) -> V
return self.getter(owner)
def forty_two(cls: Type) -> int:
return 42
class C:
forty_two: int = classproperty(foo)
这似乎合乎逻辑,但是我不知道这是否是正确的做事方式。
是否有任何文档?还是完整的示例在合并后的版本上可以实际使用?
答案 0 :(得分:1)
我无法让示例与 MyPy 一起使用。但是,下面的派生定义对我有用:
"""Defines the `classproperty` decorator."""
from typing import Any, Callable, Optional, Type, TypeVar
T = TypeVar("T")
V = TypeVar("V")
class classproperty(property):
"""Class property decorator."""
def __init__(self, getter: Callable[[Any], V]) -> None:
"""Override getter."""
self.getter = getter # type: ignore
def __get__(self, instance: Optional[T], owner: Type[T]) -> V: # type: ignore
return self.getter(owner) # type: ignore
def __set__(self, obj, value):
super(classproperty, self).__set__(type(obj), value)
def __delete__(self, obj):
super(classproperty, self).__delete__(type(obj))
答案 1 :(得分:0)
问题中描述的方法似乎对Mypy和PyCharm类型检查器均适用。