Red de conocimiento informático - Problemas con los teléfonos móviles - La diferencia entre los métodos estáticos de Python y los métodos de clase

La diferencia entre los métodos estáticos de Python y los métodos de clase

En programación orientada a objetos, método de clase y método estático son dos términos que se utilizan con frecuencia.

Lógicamente hablando: los métodos de clase solo pueden ser llamados por nombres de clase; los métodos estáticos pueden ser llamados por nombres de clase o nombres de objetos.

En C++, los métodos estáticos y los métodos de clase son lógicamente equivalentes. Solo existe un concepto y no hay confusión.

En Python, los métodos se dividen en tres categorías: métodos de instancia, métodos de clase y métodos estáticos. El código es el siguiente:

class Test(object):

def InstanceFun(self):

print("InstanceFun");

print(self);

@classmethod

def ClassFun(cls):

print("ClassFun");

imprimir( cls);

@staticmethod

def StaticFun():

imprimir("StaticFun");

t = Test() ;    

t.InstanceFun(); Ubicación de la clase

Test.StaticFun() # Salida StaticFun

t.StaticFun(); # Salida StaticFun

t .ClassFun(); # Salida ClassFun, imprimir ubicación de la clase

Test.InstanceFun(); # Error, TypeError: se debe llamar al método independiente instanciaFun() con la instancia de prueba como primer argumento

Test.InstanceFun(t); # Generar InstanceFun e imprimir la dirección de memoria del objeto "<__main__.Test object en 0x0293DCF0 >"

t.ClassFun(Test); # Error classFun() toma exactamente 1 argumento (2 dados)

Como puedes ver, en PYTHON, la principal diferencia entre los dos Los métodos son los parámetros. El parámetro implícito del método de instancia es la instancia de clase propia, mientras que el parámetro implícito del método de clase es la propia clase cls.

Los métodos estáticos no tienen parámetros implícitos, principalmente para que las instancias de clase llamen a métodos estáticos directamente.

Así que, lógicamente, los métodos de clase sólo deben ser invocados por clases, los métodos de instancia pueden ser invocados por instancias y los métodos estáticos pueden ser invocados por ambas. La principal diferencia radica en la diferencia en el paso de parámetros. El método de instancia pasa silenciosamente la autorreferencia como parámetro, mientras que el método de clase pasa silenciosamente la referencia cls como parámetro.

Python ha implementado un cierto grado de flexibilidad para que tanto las instancias como las clases puedan llamar tanto a los métodos de clase como a los métodos estáticos