def argument __init__ python class self

argument - Método de llamada Python sin ''self''



python class self argument (5)

La respuesta corta es "porque puedes def thing(args) como una función global, o como un método de otra clase. Toma este (horrible) ejemplo:

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."

Esto es malo. No hagas esto Pero si lo hicieras , podrías llamar a thing(args) y algo sucedería. Esto puede ser potencialmente bueno si planeas en consecuencia:

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

El código anterior lo hace de modo que si creas un objeto de Student clase de Student y llamas a la bio , hará todas las cosas que habrían sucedido si fuera de la clase de Person la que se llamara su propia bio y hará su propio trabajo. después.

Esto se convierte en herencia y en algunas otras cosas que quizás aún no hayas visto, pero espera con ansias.

Así que empecé a programar en Python y no entiendo todo el razonamiento detrás del "yo". Entiendo que se usa casi como una variable global, por lo que los datos se pueden pasar entre diferentes métodos en la clase. No entiendo por qué necesita usarlo cuando llama a otro método en la misma clase. Si ya estoy en esa clase, ¿por qué tengo que decirlo?

ejemplo, si tengo: ¿Por qué necesito self.thing ()?

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


Para mí, yo mismo como un definidor de alcance, con self.foo () y self.bar indicando la función y el parámetro definido en la clase y no aquellos definidos en los otros lugares.


Puede haber otra función con el mismo nombre fuera de su clase. self es una referencia de objeto al objeto en sí, por lo tanto, son iguales. Los métodos de Python no se llaman en el contexto del objeto en sí. self en Python puede usarse para tratar con modelos de objetos personalizados o algo así.


También puedes hacer métodos en clase static así que no necesitas ser self Sin embargo, usa esto si realmente lo necesitas.

Tuyo:

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

edición estática:

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


Una de las razones es referirse al método de la instancia de esa clase particular dentro de la cual se ejecuta el código.

Este ejemplo podría ayudar:

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

Se puede pensar, por ahora, en la resolución del espacio de nombres.