2012-10-14 16 views
12

Powiel możliwe:
Why do you need explicitly have the “self” argument into a Python method?Dlaczego zawsze dodajesz self jako pierwszy argument do metod klasowych?

rozumiem dlaczego ja jest zawsze pierwszy argument do metod klasy, to sprawia, że ​​całkowity sens, ale czy to zawsze tak jest, to dlaczego go przez kłopoty z pisaniem, czy dla każdej definicji metody? Czemu nie zrobić tego, co dzieje się automatycznie za kulisami?

Czy jest to dla jasności, czy jest sytuacja, w której możesz nie chcieć podać siebie jako pierwszego argumentu?

+6

Należy zauważyć, że termin * metoda klasy * oznacza coś innego niż wydaje się to oznaczać. Metoda * jest funkcją należącą do klasy, która działa na instancję - metoda klasy * * to metoda, która jest własnością klasy, która działa na tej klasie. Mówisz o tym pierwszym (który bierze "siebie" zgodnie z konwencją) w przeciwieństwie do tego ostatniego (który bierze konwencję "cls"). –

+0

bardzo pomocny odpowiada wszystkim, dzięki! –

Odpowiedz

21

Ponieważ jawność jest lepsza niż domniemana. Poprzez ustawienie parametru jako wyraźnego wymogu upraszczasz zrozumienie kodu, introspekcję i manipulację. Jest dalej rozwijany w Python FAQ.

Ponadto można zdefiniować metody klasy (wziąć klasę zamiast instancji jako pierwszy argument) i można definiować metody statyczne (nie wziąć "pierwszy argument w ogóle):

class Foo(object): 
    def aninstancemethod(self): 
     pass 

    @classmethod 
    def aclassmethod(cls): 
     pass 

    @staticmethod 
    def astaticmethod(): 
     pass 
+8

Ja kłócę się * Ponieważ jawność jest lepsza niż domniemana * jest uproszczeniem. –

+1

@ Lattyware: Być może powinienem wyjaśnić więcej, ale * Jawny jest lepszy niż niejawny * ** jest ** w rdzeniu filozofii Pythona. –

+0

To bardzo ważna kwestia. Po prostu twierdzę, że istnieje wiele innych (i ważniejszych) powodów, dla których tak działa Python. –

12

Guido wyjaśnił, że here. Zasadniczo metody są funkcjami, a funkcje nie powinny akceptować żadnych "ukrytych" parametrów, w przeciwnym razie obiekty wyższego rzędu, takie jak dekoratory, nie będą w stanie poradzić sobie z nimi w sensowny sposób.

Powiązane problemy