python / PyCharm: 访问同一class的另一个对象的受保护成员
python / PyCharm: access to a protected member of another object of the same class
在我的 class MyHeader
的方法中,我访问了另一个 MyHeader
对象的私有 属性 _label
new_header
:
class MyHeader:
def __init__(self, label, n_elem):
self._label = label
self._n_elem = n_elem
def check_header_update(self, new_header):
# check that label is preserved
if new_header._label != self._label:
raise Exception("new header must have the same label")
在 PyCharm 中,这会导致语法突出显示错误“访问 class 的受保护成员 _label”。
我尝试指定 new_header
参数的类型:
def check_header_update(self, new_header: MyHeader):
但这无法识别,并且在 运行 时这会导致错误“NameError:名称 'MyHeader' 未定义 ”。
知道如何以可接受的方式访问受保护的成员吗?
输入函数的正确方法是使用 forward references,然后像这样输入 check_header_update
。请注意,为了完整起见,我还添加了 return 类型:
def check_header_update(self, new_header: 'MyHeader') -> None:
之所以类型需要是字符串是因为你在定义check_header_update
的时候,MyHeader
还没有完全定义,所以不是可以参考的.
但是,我不记得这最终是否会解决问题。如果没有,那么我会:
- 通过删除下划线
使_label
非私有
- 制作某种getter method or use properties让其他人访问该数据
您的初始代码示例没有任何问题。只是 PyCharm 不会尝试猜测您的参数类型。我使用的大多数代码库都有数千条警告,甚至来自 IDE 分析的错误。你无法解决所有问题。
反正你可以通过方法docstring指定参数的类型,PyCharm就不会再喊警告了:
class MyHeader:
def __init__(self, label, n_elem):
self._label = label
self._n_elem = n_elem
def check_header_update(self, new_header):
"""
:type new_header: MyHeader
"""
if new_header._label != self._label:
raise Exception("new header must have the same label")
请注意,这也适用于联合类型(例如:str | MyHeader
)。
在我的 class MyHeader
的方法中,我访问了另一个 MyHeader
对象的私有 属性 _label
new_header
:
class MyHeader:
def __init__(self, label, n_elem):
self._label = label
self._n_elem = n_elem
def check_header_update(self, new_header):
# check that label is preserved
if new_header._label != self._label:
raise Exception("new header must have the same label")
在 PyCharm 中,这会导致语法突出显示错误“访问 class 的受保护成员 _label”。
我尝试指定 new_header
参数的类型:
def check_header_update(self, new_header: MyHeader):
但这无法识别,并且在 运行 时这会导致错误“NameError:名称 'MyHeader' 未定义 ”。
知道如何以可接受的方式访问受保护的成员吗?
输入函数的正确方法是使用 forward references,然后像这样输入 check_header_update
。请注意,为了完整起见,我还添加了 return 类型:
def check_header_update(self, new_header: 'MyHeader') -> None:
之所以类型需要是字符串是因为你在定义check_header_update
的时候,MyHeader
还没有完全定义,所以不是可以参考的.
但是,我不记得这最终是否会解决问题。如果没有,那么我会:
- 通过删除下划线 使
- 制作某种getter method or use properties让其他人访问该数据
_label
非私有
您的初始代码示例没有任何问题。只是 PyCharm 不会尝试猜测您的参数类型。我使用的大多数代码库都有数千条警告,甚至来自 IDE 分析的错误。你无法解决所有问题。
反正你可以通过方法docstring指定参数的类型,PyCharm就不会再喊警告了:
class MyHeader:
def __init__(self, label, n_elem):
self._label = label
self._n_elem = n_elem
def check_header_update(self, new_header):
"""
:type new_header: MyHeader
"""
if new_header._label != self._label:
raise Exception("new header must have the same label")
请注意,这也适用于联合类型(例如:str | MyHeader
)。