Entonces comencé a programar en python y no entiendo todo el razonamiento detrás de ‘yo’. Entiendo que se usa casi como una variable global, por lo que se pueden pasar datos 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 contarlo?
ejemplo, si tengo: ¿Por qué necesito self.thing()?
class bla:
def hello(self):
self.thing()
def thing(self):
print "hello"
También puedes hacer métodos en clase. static
así que no hay necesidad de self
. Sin embargo, use esto si realmente lo necesita.
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"
-
Sé que esta es una publicación anterior, pero ¿le importaría dar un ejemplo de un escenario en el que se usaría un método estático?
– uitty400
19 de agosto de 2016 a las 11:57
-
@uitty400 Los métodos estáticos operan en una o más variables estáticas. Por ejemplo, tiene una variable estática que lleva la cuenta del número de instancias creadas hasta el momento. Entonces se podría usar un método estático para, por ejemplo, incrementar ese contador.
– John Strod
16 de agosto de 2018 a las 8:19
-
@ uitty400 los métodos no estáticos pueden acceder a variables estáticas, pero los métodos estáticos no pueden acceder a variables no estáticas.
– John Strod
16 de agosto de 2018 a las 8:20
-
@Developer, no necesita el argumento propio en
thing
definición. Esto es soporte para no usar@staticmethod
en absoluto y simplemente refiriéndose a los métodos por el prefijo del nombre de la clase– matsuo_basho
22 de agosto de 2021 a las 16:05
-
Incluso si no uso
self
funciona sin usar el@staticmethod
decorador.– Volátil3
6 de septiembre de 2022 a las 5:53
dedos sangrantes
Una razón es referirse al método de ese particular instancia de la clase dentro de la cual se ejecutará 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
Puede considerarlo, por ahora, como una resolución de espacio de nombres.
Probé debajo del código que declaró el método sin parámetro en la clase y llamé al método usando el nombre de la clase.
class Employee:
def EmpWithOutPar():
return 'Hi you called Employee'
print(Employee.EmpWithOutPar())
salida: hola llamaste empleado
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 tu hizopodrías llamar thing(args)
y algo podría pasar. Potencialmente, esto puede ser algo bueno si planifica 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 hace que si creas un objeto de Student
clase y llamada bio
hará todas las cosas que habrían pasado si fuera de Person
clase que tenía su propia bio
llamó y después hará lo suyo.
Esto entra en la herencia y algunas otras cosas que quizás no hayas visto todavía, pero espera con ansias.
Para mí, self como un definidor de ámbito, con self.foo() y self.bar indicando la función y el parámetro definido en la clase y no los definidos en los otros lugares.
D4NI3LS
Puede haber otra función con el mismo nombre fuera de su clase.
self
es una referencia de objeto al objeto mismo, por lo tanto, son iguales. Los métodos de Python no se llaman en el contexto del objeto en sí. self
en Python se puede usar para tratar con modelos de objetos personalizados o algo así.
Abra un intérprete de Python y ejecute
import this
para obtener una explicación de la mayoría de las decisiones de lenguaje de Python.– Colin Valliant
8 de septiembre de 2013 a las 2:33
@ColinValliant: Declaraciones doctrinales oscuras y versátiles como “Ahora es mejor que nunca. Aunque nunca suele ser mejor que *correcto now.*” solo puede ser interpretado por una pitonisa iluminada y realmente no ayuda a responder la pregunta.
– minutos
3 de agosto de 2017 a las 11:59