2013-09-08 18 views
14

Po prostu zacząłem programowanie w Pythonie i nie rozumiem całego rozumowania stojącego za 'self'. Rozumiem, że jest używany prawie jak zmienna globalna, więc dane mogą być przekazywane między różnymi metodami w klasie. Nie rozumiem, dlaczego musisz go używać, gdy wzywasz inną metodę w tej samej klasie. Jeśli jestem już w tej klasie, dlaczego muszę to powiedzieć?Metoda wywołania w Pythonie bez 'self'

przykład, jeśli mam: Dlaczego potrzebuję self.thing()?

class bla: 
    def hello(self): 
     self.thing() 

    def thing(self): 
     print "hello" 
+4

Otwórz interpreter języka Python i uruchom 'import this', aby objaśnić większość decyzji w języku Pythona. –

+1

@ColinValliant: Niejasne i uniwersalne stwierdzenia doktrynalne, takie jak "* Teraz jest lepiej niż nigdy, chociaż nigdy nie jest często lepsze niż * prawo * teraz.* "może być interpretowane tylko przez oświeconą Pythoness i naprawdę nie pomaga w udzieleniu odpowiedzi na pytanie: – mins

Odpowiedz

9

Jednym z powodów jest odwołać się do metody instancji szczególności klasa w ciągu którego kod jest być wykonywany.

Ten przykład może pomóc:

def hello(): 
    print "global hello" 

class bla: 
    def hello(self): 
     self.thing() 
     hello() 

    def thing(self): 
     print "hello" 

b = bla() 
b.hello() 
>>> hello 
global hello 

Można myśleć o tym, na razie, aby być rozdzielczość nazw.

0

Może być inna funkcja o tej samej nazwie poza klasą. self to obiekt odwołujący się do samego obiektu, dlatego są one takie same. Metody w języku Python nie są wywoływane w kontekście samego obiektu. self w języku Python można używać do obsługi niestandardowych modeli obiektów lub czegoś podobnego.

1

Krótka odpowiedź brzmi „bo można def thing(args) jako funkcję globalną lub jako metody innej klasy Take this (straszne) Przykład:..

def thing(args): 
    print "Please don't do this." 

class foo: 
    def thing(self,args): 
     print "No, really. Don't ever do this." 

class bar: 
    def thing(self,args): 
     print "This is completely unrelated." 

To jest złe, nie rób tego. . ale jeśli zrobił, można nazwać thing(args) i coś się stanie to potencjalnie może być dobre, jeśli odpowiednio zaplanować:

class Person: 
    def bio(self): 
     print "I'm a person!" 

class Student(Person): 
    def bio(self): 
     Person.bio(self) 
     print "I'm studying %s" % self.major 

T powyższy kod sprawia, że ​​jeśli utworzysz obiekt klasy Student i zadzwonisz pod numer bio, zrobi on wszystko, co by się stało, gdyby był z klasy Person, który miałby własny bio o nazwie i zrobi to własna rzecz potem.

To wchodzi w dziedziczenie i inne rzeczy, których być może jeszcze nie widziałeś, ale czekamy na to.

11

Można również tworzyć metody w klasie static, więc nie ma potrzeby stosowania self. Jednak użyj tego, jeśli naprawdę tego potrzebujesz.

wyrazami:

class bla: 
    def hello(self): 
     self.thing() 

    def thing(self): 
     print "hello" 

edycja statyczny:

class bla: 
    @staticmethod 
    def hello(): 
     bla.thing() 

    @staticmethod 
    def thing(): 
     print "hello" 
+1

Wiem, że jest to starszy wpis, ale czy mógłbyś podać przykład scenariusza, w którym można by zastosować statyczną metodę? – uitty400

0

Dla mnie samo jak definiujący zakres, z self.foo() i self.bar wskazaniem funkcji i parametrów podanych w klasa, a nie te, które definiuje się w innych miejscach.

Powiązane problemy