PyCharm和类对象的正确类型提示

时间:2018-03-28 03:39:08

标签: python-3.x pycharm

系统: - Windows 10 x64 - Python 3.6 x64 - PyCharm 2017.3.4

我试图更好地理解Python类型注释与指定类对象而不是类的实例有关。假设我有一个超类和一个子类,我想循环遍历一个类对象列表并实例化其中一个。

在下面的代码中,我可以直接从类中直接实例化(例如,使用Ctrl-P),在PyCharm中获得正确的代码完成和工具提示。但是,如果我循环遍历列表并为迭代变量typing.Type[Super1]提供类型注释(使用cls),它似乎将其注释为实例,而不是类对象。所以我得到了方法和属性的正确代码完成,但是我没有得到初始化函数参数的工具提示。

如何将其注释为一组类,而不是一组类的实例(即此变量是Super1类或Super1的子类)。这是正确的方法,但PyCharm只是没有正确识别它或实际上有不同的方法来做到这一点。

import typing

class Super1:
    def __init__(self, name: str):
        self.name = name
        self.meta = "super class"

    def print_name(self):
        print(self.name)

class Sub1(Super1):
    def __init__(self, name: str):
        super(Sub1, self).__init__(name)
        self.meta = "sub class"


super_instance = Super1("name")  # <-- get proper type hints in PyCharm
sub1_alias = Sub1
sub1_alias("name")  # <-- get proper type hints for the __init__ function in PyCharm

cls: typing.Type[Super1]
for cls in (Super1, Sub1):
    inst = cls("name")  # <-- Ctrl-P does not give proper type hints for the __init__ function in PyCharm

enter image description here

0 个答案:

没有答案