Método método instancia de clase pitón estática Método

Método de las Clases 1

@classmethod
voluntad a un método de envasado de un método de clase.

Un método de la clase clase a sí mismo como el primer argumento, como un ejemplo de un método para el Ejemplo sí mismos como el primer argumento. Por favor utilice los siguientes hábitos a métodos de clase declarar:

class C:
    @classmethod
    def f(cls, arg1, arg2, ...): ...

decorador de formar tales @classmethod llamada función - Para más detalles, véase la definición de función.
categoría Cómo Francia de tono uso ( C . f ( ) ) ( C ( ) . f ( ) ) \ Color {red} {clase llama al método puede realizarse de la clase (por ejemplo de Cf ()) puede realizarse de casos (por ejemplo, C (). F ()). }
serán ignorados ejemplos de su tipo fuera de su clase. Si la invocación del método en su clase derivada pertenece a la clase, el objeto clase derivada se pasa como el primer argumento es implícito.
C ++ Java métodos de clase y métodos estáticos o diferente. Si necesita este último, consulte métodoestático ().

2 método estático

@staticmethod
métodos de transferencia como los métodos estáticos.

\ Color {red} método estático no recibe un primer parámetro implícito. Para declarar un método estático, utilice esta sintaxis

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...

decorador de formar tales @staticmethod llamada función - Para más detalles, véase la definición de función.

( C . f ( ) ) ( C ( ) . f ( ) ) \ Color llamada método estático {red} puede estar basado en (por ejemplo, de Cf ()) se puede realizar (por ejemplo, C (). F ()) en el ejemplo.

Los métodos estáticos en Python y Java o C ++ métodos estáticos son similares. Ver classmethod (), se utiliza para crear variantes constructor de clase alternativo.

Al igual que todos los decoradores desea, también puede llamar a la misma función que un métodoestático convencional, y llevar a cabo algún tipo de acción en sus resultados. Estas funciones tienen que hacer referencia a la clase del cuerpo y en algunos casos se desea evitar la conversión automática a ejemplo del método. Para estos casos, utilice la siguiente sintaxis:

class C:
    builtin_open = staticmethod(open)

Para obtener más información sobre los métodos estáticos, por favor refiérase a la jerarquía de tipos estándar.

3 diferencia

  • Diferentes configuraciones: método de la clase clase requiere que sus primeros CLS argumento, el método estático no recibe un primer parámetro implícito, su propia instancia del ejemplo del método como el primer auto argumento;
  • Ejemplos de métodos necesitan llamada después de la creación de instancias, mientras que los otros dos pueden ser llamados directamente dependen de la clase, después de clase todavía crear métodos de instancia y métodos estáticos se puede utilizar;
  • constructor de la clase Java puede sobrecargarse, método de clase pitón en el caso de que define una pluralidad de analógico java constructor;
  • Método estático utiliza Python y Java como clases e instancias diseñadas pueden ser invocados después se crea la instancia, sin crear además un nuevo método estático, utilizando la clase de los padres;
  • Estático Escenario método: Si no acceder a cualquier métodos de instancia y las propiedades en el método, puramente por pasar un parámetro y devuelve un método funcional de los datos, entonces es conveniente para los métodos estáticos se definen, se ahorra la sobrecarga de la instanciación de objetos costes, este método es a menudo en el exterior de la clase como una función de la presencia de las capas de módulo no es ningún problema, pero en la categoría, sólo el tipo de servicio.
  • Método escenarios de uso de clase: 1, como un método de fábrica para crear una instancia de objeto, por ejemplo, se han incorporado en método de clase clase módulo datetime.date ampliamente utilizado como un método de fábrica, con el fin de crear un objeto de la fecha. 2, si desea llamar a un método estático dentro de la clase, entonces el método definido como un método de clase es adecuado, porque si se define como métodos estáticos, entonces usted tiene que hacer referencia explícita a la clase A, esto no es una cosa buena para la herencia .
# coding:utf-8
class Foo(object):
    """类三种方法语法形式"""
    x,y = 10,14
    def instance_method(self):
        pass
    @staticmethod
    def static_method_averag(*mixes):
        return sum(mixes) / len(mixes)

    @classmethod
    def class_method(cls):
        return cls.static_method_averag(cls.x,cls.y)

foo = Foo()
# 调用关系
# foo.instance_method()
# foo.static_method_averag(1,2,3)
# foo.class_method()
# print('----------------')
# Foo.static_method_averag(1,2,3)
# Foo.class_method()
# print('----------------')

# 内存关系
print(Foo.static_method_averag is  foo.static_method_averag)  #静态方法不会动
print(Foo.class_method is  foo.class_method)
print(Foo.instance_method is  foo.instance_method)  #实例化后 实例绑定这个方法



Referencia:
https://zhuanlan.zhihu.com/p/28010894
https://docs.python.org/zh-cn/3/index.html

Publicados 105 artículos originales · ganado elogios 8 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/x1131230123/article/details/104475923
Recomendado
Clasificación