¿Pueden los métodos estáticos de Python acceder a los métodos de clase?
Las clases o instancias pueden acceder tanto a los métodos estáticos de Python como a los métodos de miembros de clase. Los conceptos de los dos no son fáciles de aclarar, pero aún existen diferencias:
1) Estático. no es necesario pasar los métodos Ingrese el parámetro self y los métodos de los miembros de la clase deben pasar el parámetro cls que representa esta clase;
2) A partir del elemento 1, los métodos estáticos no pueden acceder a las variables de instancia ni a los miembros de la clase. los métodos tampoco pueden acceder a las variables de instancia, pero se puede acceder a las variables de clase;
3) Los métodos estáticos son un poco como bibliotecas de herramientas de funciones, mientras que los métodos de miembros de clase están más cerca de los métodos estáticos en los conceptos orientados a objetos de Java.
Dos formas de implementar métodos estáticos y métodos de clase
1. En Python 2.3 y versiones anteriores, utilice el empaquetado de objetos de tipo método estático y método de clase para implementar
Los ejemplos son de la siguiente manera (Preste atención a las instrucciones impresas):
class MyClass:
val1 = 'Value 1'
def __init__(self): p>
self.val2 = 'Valor 2'
def staticmd():
print 'Método estático, no se puede acceder a val1 y val2'
smd = staticmethod(staticmd )
def classmd(cls):
print 'Método de clase, clase: ' + str(cls) + ', val1: ' + cls.val1 + ', no se puede acceder a val2 El valor de '
cmd = classmethod(classmd)
Ejecución:
>>> mc = MyClass()
>>> mc.smd()
>>> mc.cmd()
>>> MiClase.smd()
> >> MyClass.cmd()
2. En Python 2.4 y posteriores, use decoradores para implementar
Los decoradores usan el operador @. Los ejemplos son los siguientes:
clase MiClase:
val1 = 'Valor 1'
def __init__(self):
self.val2 = 'Valor 2'
@staticmethod
def staticmd():
imprimir 'Método estático, no se puede acceder a val1 y val2'
@classmethod
def classmd(cls) :
print 'Método de clase, clase: ' + str(cls) + ', val1: ' + cls.val1 + ', no se puede acceder al valor de val2'