我正在使用
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
我想现在它看起来更好了,但是据我所知,通过像这样编写这些变量,我使它们静态。
我考虑过这样注释类型:
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 建议的那样注释这些类型,还是应该内联执行此操作?
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__
函数中注释参数。-> None
之后的
__init__
可以省略。对于 __init__
永远不会返回值。