pycharm Python类成员类型提示

oxosxuxt  于 2022-11-08  发布在  PyCharm
关注(0)|答案(2)|浏览(190)

我正在使用PyCharm来开发一些Python应用程序。我试图尽可能使用最前沿的Python,所以我正在使用新的Python特性。我在使用type hinting时遇到了一个问题。
让我们看看我的DataAnalyzer类:

class DataAnalyzer:

    def __init__(self, train_data: pd.DataFrame, test_data: pd.DataFrame) -> None:
        self.train_data = train_data
        self.test_data = test_data

    def analyze(self):
        pass

现在,PyCharm用黄色灯泡向我发送垃圾邮件,希望我向self.train_dataself.test_data添加类型注解。如果我单击此消息进行此操作,PyCharm会在类的开头添加两行:

class DataAnalyzer:
    train_data: pd.DataFrame
    test_data: pd.DataFrame

    def __init__(self, train_data: pd.DataFrame, test_data: pd.DataFrame) -> None:
        self.train_data = train_data
        self.test_data = test_data

    def analyze(self):
        pass

我想现在它看起来更好了,但是AFAIK通过像这样写这些变量,我把它们变成了static
我想对类型进行如下注解:

class DataAnalyzer:

    def __init__(self, train_data: pd.DataFrame, test_data: pd.DataFrame) -> None:
        self.train_data: pd.DataFrame = train_data
        self.test_data: pd.DataFrame = test_data

    def analyze(self):
        pass

这是肯定不清楚的,但我不会让我的类成员静态,当我不想。
我知道,在方法签名中注解类型,在我刚刚赋值这些类型时再这样做一次,是一种矫枉过正的做法,但我要求的是一般规则。我应该像PyCharm建议的那样注解这些类型,还是应该内联地这样做?

4zcjmb1e

4zcjmb1e1#

PyCharm的建议是正确的。事实上,我认为下面的代码更好:

class DataAnalyzer:
    train_data: pd.DataFrame
    test_data: pd.DataFrame

    def __init__(self, train_data, test_data):
        self.train_data = train_data
        self.test_data = test_data

    def analyze(self):
        pass

请说明:

  • 为成员添加注解并不会使其成为静态成员。
  • 我们不应该再对__init__函数中的参数进行注解。
  • __init__之后的-> None可以省略。对于__init__,从不返回值。
vuktfyat

vuktfyat2#

两个选项都有效-请查看pep 526
类型注解也可以用来注解类体和方法中的类和示例变量。特别是,无值符号a: int允许注解应该在__init____new__中初始化的示例变量。
MyPy文档也是一个很好的类型提示资源

相关问题