如何在equals()方法中抑制pycharm中的警告“访问受保护的成员”?

时间:2019-06-04 09:06:03

标签: python pycharm encapsulation

我上课

class A(object):
    def __init__(self, data):
        self._data = data
    def _equals(self, other):
        return self._data == other._data

Pycharm不喜欢我访问other._data,因为它是私有的。

  

“访问受保护的成员”

这对我来说没有意义,因为访问是从类内部进行的。

我该如何抑制此警告或编写正确的代码?

3 个答案:

答案 0 :(得分:0)

您遇到的问题是由于other在技术上根本不是同一类。它们具有相同的定义(如果它们具有相同的实例,但它们不是同一实例。您可以将它们视为两个单独的黑匣子,这就是Python不喜欢它的原因。

我能看到的解决该问题的最简单方法是对_data变量(例如:)进行公共访问。

return self._data == other.get_data()

仅使用方法即可

def get_data():
    return self._data

您还可以将变量设置为public,但是我认为这不是您想要的。

答案 1 :(得分:0)

如果您确实需要它,例如namedlist._asdict(),答案是Can I get PyCharm to suppress a particular warning on a single line?

class A(object):
    def __init__(self, data):
        self._data = data
    def _equals(self, other):
        # noinspection PyProtectedMember
        return self._data == other._data

答案 2 :(得分:0)

Python 3.5+ 答案(引入了类型提示):

from __future__ import annotations


class A(object):
    def __init__(self, data):
        self._data = data

    def _equals(self, other: A):
        return self._data == other._data

使用@Giacomo Alzetta 建议的类型提示,并允许使用 from __future__ import annotations 对类本身进行类型提示。

不再需要破解 PyCharm 或写丑陋的评论。


正如@jonrsharpe 所指出的,python 2 also supports type hints 通过文档字符串。
我不会在这里发布这个,因为我支持 Python 2 失去支持。