Python “如何抑制警告”;访问受保护成员“;用什么方法?
我有课Python “如何抑制警告”;访问受保护成员“;用什么方法?,python,pycharm,encapsulation,Python,Pycharm,Encapsulation,我有课 class A(object): def __init__(self, data): self._data = data def _equals(self, other): return self._data == other._data Pycharm不喜欢我访问其他数据,因为它是私有的 “访问受保护成员” 这对我来说没有意义,因为访问是从类内部进行的 如何抑制此警告或编写正确的代码?如果您真的需要它,如's\u asdict(),答案
class A(object):
def __init__(self, data):
self._data = data
def _equals(self, other):
return self._data == other._data
Pycharm不喜欢我访问其他数据,因为它是私有的
“访问受保护成员”
这对我来说没有意义,因为访问是从类内部进行的
如何抑制此警告或编写正确的代码?如果您真的需要它,如's
\u asdict()
,答案是:
Python 3.5+答案(引入了类型提示):
使用@Giacomo Alzetta建议的类型提示,并允许使用来自未来的导入注释的对类本身进行类型提示
没有必要再攻击PyCharm或写难看的评论
正如@jornsharpe通过docstrings指出的那样。
我不会在这里发布这篇文章,因为我支持的Python 2正在失去支持。它在self
的类中,但即使它有\u data
属性,也不能保证other
也是A
。例如,你读过吗?你是否知道你可以重写Python中的=
操作符(这样做的钩子是\uuuueq\uuueq
,而不是\uequals
)?它没有说“可能不是正确的类型”,而是说你正在访问一个私有成员。Python是duck类型的,从解释器的角度来看,other
是否是A
并不重要,只要它具有\u data
属性即可。我的观点是,这可能不是other
类中的访问权限。您应该检查它们的类型。。。如果添加如果不存在(其他,A):返回false
则不会得到警告。也许只需添加,其他:一个注释就足够了。。。。PyCharm应该足够聪明,可以使用它们来推断类型。
class A(object):
def __init__(self, data):
self._data = data
def _equals(self, other):
# noinspection PyProtectedMember
return self._data == other._data
from __future__ import annotations
class A(object):
def __init__(self, data):
self._data = data
def _equals(self, other: A):
return self._data == other._data