python 中的动态 class 级别类型提示?
Dynamic class level type hints in python?
我正在尝试在 PyCharm 中为特定的 class 动态提供类型提示,这意味着它的一个属性在 __init__
期间已分配了一个值,轮到它了是一个对象。
我试过为属性定义一个 class 级别类型,但是属性的类型可能是多个 class 之一,所以我不能真正指向特定的类型,但我希望能够自动完成该属性。
class Dynamic:
def __init__(self):
self.field1 = "field1"
self.field2 = "field2"
class Reusable:
def __init__(self, dynamics=None):
if dynamics:
self.values = dynamics
else:
self.values = "nothing"
dynamic_test = Dynamic()
test = Reusable(dynamics=dynamic_test)
print(test.values.) # this is the place where auto-complete should take place
显然,自动完成不会发生。
我尝试了类似于
class Reusable:
value_type = str # type to-be-modified later
values: value_type
def __init__(self, dynamics=None):
if dynamics:
self.values = dynamics
else:
self.values = "nothing"
Reusable.value_type = type(self.values) # doesn't actually modify that so I won't have auto-complete based on type
我知道有一些可能性涉及处理内置 __dir__
函数,但是我也没有得到任何运气(不确定是否依赖于 PyCharm 的自动完成算法或不),也没有朝这个方向开发任何插件。
在这种情况下,有什么办法可以解决这个问题并拥有自动完成功能吗?
考虑使用类型提示:
from typing import Generic, TypeVar, Union
T = TypeVar("T")
class Reusable(Generic[T]):
values: Union[str, T]
def __init__(self, dynamics: T = None):
if dynamics:
self.values = dynamics
else:
self.values = "nothing"
这里我们将 Reusable
标记为可以用 T
参数化的 class。
通过将 dynamics
标记为 T
,我们指定了从何处获取 T
的确切值。
Union[str, T]
表示 values
是 str
或 T
.
有关详细信息,请参阅 PEP-484。
我正在尝试在 PyCharm 中为特定的 class 动态提供类型提示,这意味着它的一个属性在 __init__
期间已分配了一个值,轮到它了是一个对象。
我试过为属性定义一个 class 级别类型,但是属性的类型可能是多个 class 之一,所以我不能真正指向特定的类型,但我希望能够自动完成该属性。
class Dynamic:
def __init__(self):
self.field1 = "field1"
self.field2 = "field2"
class Reusable:
def __init__(self, dynamics=None):
if dynamics:
self.values = dynamics
else:
self.values = "nothing"
dynamic_test = Dynamic()
test = Reusable(dynamics=dynamic_test)
print(test.values.) # this is the place where auto-complete should take place
显然,自动完成不会发生。 我尝试了类似于
class Reusable:
value_type = str # type to-be-modified later
values: value_type
def __init__(self, dynamics=None):
if dynamics:
self.values = dynamics
else:
self.values = "nothing"
Reusable.value_type = type(self.values) # doesn't actually modify that so I won't have auto-complete based on type
我知道有一些可能性涉及处理内置 __dir__
函数,但是我也没有得到任何运气(不确定是否依赖于 PyCharm 的自动完成算法或不),也没有朝这个方向开发任何插件。
在这种情况下,有什么办法可以解决这个问题并拥有自动完成功能吗?
考虑使用类型提示:
from typing import Generic, TypeVar, Union
T = TypeVar("T")
class Reusable(Generic[T]):
values: Union[str, T]
def __init__(self, dynamics: T = None):
if dynamics:
self.values = dynamics
else:
self.values = "nothing"
这里我们将 Reusable
标记为可以用 T
参数化的 class。
通过将 dynamics
标记为 T
,我们指定了从何处获取 T
的确切值。
Union[str, T]
表示 values
是 str
或 T
.
有关详细信息,请参阅 PEP-484。