Python class 成员类型提示
Python class members type hinting
我正在使用 PyCharm
开发一些 Python 应用程序。我正在尝试尽可能使用最先进的 python,因此我正在使用新的 python 功能。 type hinting
.
我有问题
大家来看看我的DataAnalyzer
class:
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:
的开头添加两行
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
我想现在它看起来更好了,但是据我所知,通过像这样编写这些变量我使它们成为 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
这绝对不清楚,但我不想让 class 成员静态化。
我知道,通过在方法签名中注释类型,当我只分配这些类型时再做一次,是一种矫枉过正,但我要求的是一般规则。我应该像 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__
函数中注释参数。
__init__
后的-> None
可以省略。对于 __init__
永远不会 return 一个值。
谢谢。
两个选项都有效 - 查看 pep 526
Type annotations can also be used to annotate class and instance variables in class bodies and methods. In particular, the value-less notation a: int
allows one to annotate instance variables that should be initialized in __init__
or __new__
.
MyPy documentation 也是类型提示的好资源
我正在使用 PyCharm
开发一些 Python 应用程序。我正在尝试尽可能使用最先进的 python,因此我正在使用新的 python 功能。 type hinting
.
大家来看看我的DataAnalyzer
class:
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:
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
我想现在它看起来更好了,但是据我所知,通过像这样编写这些变量我使它们成为 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
这绝对不清楚,但我不想让 class 成员静态化。
我知道,通过在方法签名中注释类型,当我只分配这些类型时再做一次,是一种矫枉过正,但我要求的是一般规则。我应该像 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__
永远不会 return 一个值。
__init__
后的谢谢。
两个选项都有效 - 查看 pep 526
Type annotations can also be used to annotate class and instance variables in class bodies and methods. In particular, the value-less notation
a: int
allows one to annotate instance variables that should be initialized in__init__
or__new__
.
MyPy documentation 也是类型提示的好资源