我上课
class A(object):
def __init__(self, data):
self._data = data
def _equals(self, other):
return self._data == other._data
Pycharm不喜欢我访问other._data
,因为它是私有的。
“访问受保护的成员”
这对我来说没有意义,因为访问是从类内部进行的。
我该如何抑制此警告或编写正确的代码?
答案 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)
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 失去支持。