0

的另一个对象的保护成员在我班上的方法MyHeader我访问另一个MyHeader对象new_header的私有财产_label蟒蛇/ PyCharm:访问同一类

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,这个结果在语法高亮错误“访问受保护的成员_label类”。

我试图指定new_header参数的类型:

def check_header_update(self, new_header: MyHeader): 

但这并不认可,并在运行时这导致错误“NameError:名字‘MyHeader’没有定义” 。

任何想法如何以可接受的方式访问受保护的成员?

回答

0

键入功能的正确方法是使用forward references,然后像这样键入check_header_update。请注意,我还增加了返回类型,完整性:

def check_header_update(self, new_header: 'MyHeader') -> None: 

为什么类型必须是一个字符串,是因为当你定义check_header_updateMyHeader还尚未完全定义的原因,所以是不是你可以参考的东西。

但是,我不记得这是否会最终解决问题。如果没有,那我就可以:

  1. _label非私有通过移除强调
  2. 做某种getter method or use properties让其他人访问数据
+0

它的工作原理,谢谢您! – Thomas

+0

也感谢指向文档的指针。 另外,在我的课程上下文中,“_label”仍然是私有的,所以我很高兴它能够像这样工作。 – Thomas