web-dev-qa-db-fra.com

Accès protégé Pylint W0212

En Python, le préfixe avec un trait de soulignement indique qu'un membre ne doit pas être accessible en dehors de sa classe. Cela semble être sur une base par classe comme Java et C++ .

Cependant, Pylint semble appliquer cette convention par objet. Existe-t-il un moyen d'autoriser l'accès par classe sans recourir à #pylint: disable=protected-access?

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

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

Résultat:

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

Pylint décrit le message ici .

19
Jim K

pylint ne sait pas de quel type other est (comment devrait-il, vous pouvez comparer une instance de A à tout), donc l'avertissement. Je ne pense pas qu'il existe un moyen de désactiver l'avertissement.

Vous pouvez désactiver l'avertissement pour cette seule ligne en ajoutant # pylint: disable=W0212 à cette ligne.

14
Christian Geier

Christian Geier a raison de savoir pourquoi vous obtenez l'erreur et comment la désactiver.

Je vous encourage cependant à envisager de changer votre code: pylint vous dit quelque chose d'important. D'après votre exemple de code, vous souhaitez utiliser eq compare des objets de classe A à d'autres objets de classe A, mais votre exemple ne garantit pas qu'un appelant n'essaiera pas A() == C(). Renvoyer True lorsque vous cochez Circle()._radius == Sphere._radius semble susceptible de causer des problèmes.

Voir ce thread stackoverflow pour une discussion sur la façon de gérer cela.

1
Channing Moore