0

Dans une méthode de ma classe MyHeader i accéder à la propriété privée _label d'un autre objet MyHeadernew_header:python/PyCharm: l'accès à un membre protégé d'un autre objet de la même classe

class MyHeader: 
    def __init__(self, label, n_elem): 
     self._label = label 
     self._n_elem = n_elem 

    def check_header_update(self, new_header): 
     # check that label is preserved 
     if new_header._label != self._label: 
      raise Exception("new header must have the same label") 

Dans PyCharm, ce résultat dans l'erreur de coloration syntaxique "Accès à un membre protégé _label d'une classe".

J'ai essayé de spécifier le type du paramètre new_header:

def check_header_update(self, new_header: MyHeader): 

mais ce n'est pas reconnu, et à l'exécution cela conduit à l'erreur « NameError: nom « MonEntête » est pas défini » .

Une idée comment accéder au membre protégé d'une manière acceptée?

Répondre

0

La bonne façon de taper votre fonction serait d'utiliser forward references, et tapez votre check_header_update comme ça. Notez que je suis également d'ajouter le type de retour, pour être complet:

def check_header_update(self, new_header: 'MyHeader') -> None: 

La raison pour laquelle le type doit être une chaîne est parce que quand vous définissez check_header_update, MyHeader n'a pas encore été complètement défini, donc n'est pas quelque chose à laquelle vous pouvez vous référer.

Cependant, je ne me souviens pas si cela résoudra le problème ou non. Si elle ne le fait pas, alors je soit:

  1. Faire _label non-privé en supprimant qui mettent en relief
  2. faire une sorte de getter method or use properties pour laisser d'autres personnes accéder à ces données
+0

Il fonctionne, merci toi! – Thomas

+0

Merci aussi pour le pointeur vers la documentation. Aussi, dans le contexte de ma classe, il est logique que '_label' reste privé donc je suis heureux que cela fonctionne comme ça. – Thomas