我正在使用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_data
和self.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建议的那样注解这些类型,还是应该内联地这样做?
2条答案
按热度按时间4zcjmb1e1#
PyCharm的建议是正确的。事实上,我认为下面的代码更好:
请说明:
__init__
函数中的参数进行注解。__init__
之后的-> None
可以省略。对于__init__
,从不返回值。vuktfyat2#
两个选项都有效-请查看pep 526
类型注解也可以用来注解类体和方法中的类和示例变量。特别是,无值符号
a: int
允许注解应该在__init__
或__new__
中初始化的示例变量。MyPy文档也是一个很好的类型提示资源