2016-04-02 20 views
0

Wenn ich die folgenden zwei Klassen:ein internes Attribut von einer anderen Klasse Zugriff auf

class Test() 
    def __init__(self): 
     self._path={} # key= source node, value = list of neighbors 

class PrintNodes() 
    def printing(self) 
     Test()._path[key] # Is it possible? 

Wenn ich in self._path={} von PrintNodes() Klasse über die Tasten auf Schleife will, muß ich in Test() eine Getter-Methode mache in ähnlich wie Java oder C++? Wenn nein, kann mir jemand einen Weg vorschlagen?

Vielen Dank im Voraus.

+1

Haben Sie Ihren Code ausprobiert? – syntonym

+0

Eigentlich nein, ich versuche nur Ideen zu gewinnen. Ich werde es jetzt machen. Vielen Dank –

+0

Ihr Code sollte funktionieren. – John

Antwort

0

Wenn PrintNodes auf die Attribute einer Instanz von Test zugreifen können, müssen Sie die Test-Instanz an die PrintNodes-Instanz übergeben.

Zum Beispiel:

class Test() 
    def __init__(self): 
     self._path={} 

Class PrintNodes() 
    def printing(self, test) # pass in the instance here 
     print(test._path[key]) 

Python keine starke Mechanismen Zugriffsschutz wie C haben ++ oder Java, so dass es keinen Nutzen _path Attribut als Privat der Test-Kennzeichnung, es sei denn, es ist etwas, dass es gefährlich ist, für andere Klassen auf abzuhängen . So Ihr Code könnte wie folgt aussehen:

class Test() 
    def __init__(self): 
     self.path={} # not private 

Class PrintNodes() 
    def printing(self, test) 
     print(test.path[key]) 

Wenn es gefährlich ist, auf dem Weg hängen - zum Beispiel Sie es von einem dict zu einem list in Zukunft ändern könnten - dann markieren Sie es als privat einen führenden Unterstrich und Unterlassen Sie den Zugriff in anderen Klassen.

+0

Großartig! Danke :) –

+0

Ich dachte, er fragte etwas über abstrakte Klasse. Wie eine abstrakte Methode aufrufen –

Verwandte Themen