English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Al aprender código de Python, he visto que en algunos métodos de las clases, el primer parámetro es cls, y en otros es self. Después de investigar, descubrí que Python no limita el nombre del primer parámetro de los métodos de la clase, puede ser self o cls. Sin embargo, según el uso común de las personas, self generalmente se utiliza en métodos de instancia, mientras que cls generalmente se utiliza en métodos de clase, y en métodos estáticos no es necesario usar un parámetro predeterminado. En el código siguiente, los métodos de la clase InstanceMethod tienen el primer parámetro predeterminado self, aquí se puede cambiar el nombre de self por cualquier nombre sin afectar en absoluto. Al llamar a la clase, se debe cumplir con los requisitos de cantidad de parámetros (los parámetros contienen*args es una excepción), por ejemplo}}13en la línea, cuando se llama a la clase sin parámetros, se producirá un error. Del mismo modo, el número de parámetros de los métodos de instancia también debe cumplir con los requisitos, por ejemplo16en la línea también se producirá un error. Una de las características principales de los métodos de instancia es que necesitan estar asociados con un objeto, el analizador de Python transmitirá automáticamente la instancia en sí misma al método, como14como se muestra en la línea, se debe usar directamente InstanceMethod.f1() no se puede llamar al método.
class InstanceMethod(object): def __init__(self, a): self.a = a def f1(self): print 'This is {0}.'.format(self) def f2(self, a): print 'Value:{0}'.format(a) if __name__ == '__main__': # im = InstanceMethod() im = InstanceMethod('233') im.f1() # im.f2() im.f2(233)
Ambos métodos estáticos y métodos de clase necesitan usar decoradores, que son respectively @staticmethod y @classmethod.Los métodos estáticos no tienen relación con la clase, creo que es un método general encapsulado en la clase, como en el siguiente ejemplo, se puede llamar al método estático tanto con una instancia como sin ella. En los métodos de clase, el primer parámetro utilizado por defecto es cls, los métodos de clase también pueden llamarse directamente a la clase sin necesidad de una instancia. Para estos tres métodos diferentes, el uso se muestra en el siguiente ejemplo. Entonces, la pregunta es, ¿cuáles son las ventajas de los métodos de instancia, métodos de clase y métodos estáticos en comparación?
En los métodos de clase, ya sea que se utilice una instancia o una llamada de clase al método, se pasa el clase como primer parámetro, que es la propia clase. Si se hereda de la clase que utiliza el método de clase, todos los subclases de esta clase también tendrán este método, y este método se dirigirá automáticamente al subclase en sí mismo, lo que es muy útil en las funciones de fábrica. Los métodos estáticos no tienen relación con la clase ni con la instancia, pueden ser reemplazados por métodos generales, pero el uso de métodos estáticos permite una mejor organización del código, evitando que el código se vuelva más caótico cuando el código se hace más grande. Los métodos de clase pueden reemplazar los métodos estáticos. Los métodos estáticos no se pueden modificar en la herencia.
class test(object): def instance_method(self): print 'Esto es {0}'.format(self) @staticmethod def static_method(): print 'Esto es un método estático.' @classmethod def class_method(cls): print 'Esto es {0}'.format(cls) if __name__ == '__main__': a = test() a.instance_method() a.static_method() a.class_method() print '"----------------------------------------' # test.instance_method() test.static_method() test.class_method()
Esto es todo el contenido de este artículo. Esperamos que el contenido de este artículo pueda ayudarle en su aprendizaje o trabajo. También esperamos que nos apoye y aliente el tutorial ¡Gritar!
Declaración: el contenido de este artículo se ha obtenido de la red, pertenece al propietario original, ha sido contribuido y subido por usuarios de Internet de manera autónoma. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a notice#w.3Aviso: si encuentra contenido sospechoso de infracción de derechos de autor en este sitio, envíe un correo electrónico a notice#w para denunciar, y proporcione evidencia relevante. Una vez confirmada la infracción, este sitio eliminará inmediatamente el contenido sospechoso.