Pylint W0212 protected-access

蓝咒 提交于 2019-12-23 06:49:23

问题


In Python, prefixing with one underscore indicates that a member should not be accessed outside of its class. This seems to be on a per-class basis like Java and C++.

However, pylint seems to enforce this convention on a per-object basis. Is there a way to allow per-class access without resorting to #pylint: disable=protected-access?

class A:
    def __init__(self):
        self._b = 5

    def __eq__(self, other):
        return self._b == other._b

Result:

pylint a.py
a.py:6: W0212(protected-access) Access to a protected member _b of a client class

Pylint describes the message here.


回答1:


pylint doesn't know of which type other is (how should it, you can compare an instance of A to everything), therefore the warning. I don't think there is a way around disabling the warning.

You can disable the warning for only that one line with appending # pylint: disable=W0212 to that line.




回答2:


Christian Geier is right about why you're getting the error, and how to disable it.

I'd encourage you to consider changing your code, though: pylint is telling you something important. From your example code looks like you want to use eq compare objects of class A to other objects of class A, but your example won't guarantee that a caller won't try A() == C(). Returning True when you check Circle()._radius == Sphere._radius seems likely to cause problems.

See this stackoverflow thread for discussion of how to handle this.



来源:https://stackoverflow.com/questions/35701624/pylint-w0212-protected-access

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!