2012-04-03 8 views
11

Wir wissen, dass in einer Klasse, Startfunktionen mit __function__ nicht importiert werden, während mit:Python Unterstrich _variables

from module import * 

Jemand fragte, was ein _variable ist? Ich habe nie einen.
Existieren sie? Ist dies ein Konzept der Variablen, auf das nicht mit dem Klassenobjekt oder etwas zugegriffen werden kann?

+0

Mögliches Duplikat (http://stackoverflow.com/questions/1301346/what-is -die Bedeutung eines einzelnen und eines doppelten Unterstrichs vor einem Objektnamen – MackM

Antwort

4

Ein Beispiel sagt mehr als 1000 Worte:

class test(object): 
    def __init__(self): 
     self.a = 0 
     self._b = 0 
    def change_a(self): 
     self.a = 1 
    def change_b(self): 
     self._b = 1 
    def display_b(self): 
     print "_b: ", self._b 

wie sie ist, ist das Ergebnis:

c = test() 
c.a 
0 
#expected. 

c.b 
AttributeError: 'test' object has no attribute 'b' 
# because _b is private 

c.display_b() 
_b: 0 
# methods can display private variables. 

jetzt einige Werte zuweisen:

c.a=100 
c.b=100 
c.a 
100 
# again, expected 
c.b 
100 
# as expected 
c.display_b() 
_b: 0 
# again, private variable can't be changed directly. 

Jetzt ruft interne funcs: [? Was ist der Sinn eines Single- und ein Doppelstrich vor einem Objektname ist]

c.change_a() 
c.change_b() 
c.a 
1 
# expected 
c.b 
100 
# that c.change_b() function isn't changing the externally created variable c.b 
c.display_b() 
1 
#but it changed the internal variable _b