Python 3.x python/PyCharm:访问同一类的另一个对象的受保护成员
在我的类Python 3.x python/PyCharm:访问同一类的另一个对象的受保护成员,python-3.x,syntax-highlighting,private-members,type-hinting,Python 3.x,Syntax Highlighting,Private Members,Type Hinting,在我的类MyHeader的方法中,我访问另一个MyHeader对象new\u 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 preserv
MyHeader
的方法中,我访问另一个MyHeader
对象new\u 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中,这会导致语法突出显示错误“访问受保护的成员\u类的标签”
我尝试指定new_头的类型
参数:
def check_header_update(self, new_header: MyHeader):
但这是无法识别的,在运行时会导致错误“namererror:name'MyHeader'未定义”
知道如何以可接受的方式访问受保护的成员吗?键入函数的正确方法是使用,然后键入您的check\u header\u update
,就像这样。注意,为了完整起见,我还添加了返回类型:
def check_header_update(self, new_header: 'MyHeader') -> None:
该类型需要为字符串的原因是,在定义check\u header\u update
时,MyHeader
尚未完全定义,因此您无法参考
然而,我不记得这是否能解决问题。如果没有,我会:
通过删除下划线,使标签
非私有
您的初始代码示例没有任何错误。只是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
)。还感谢指向文档的指针。另外,在我的课堂环境中,\u label
仍然是私有的,所以我很高兴它是这样工作的。我认为对于初学者来说,最好的答案是包含一个@property用法的示例