Método de syntax_instance avanzado de Python, método estático, método de clase

Sintaxis avanzada de Python

Método de instancia, método estático, método de clase

Atributo de clase, atributo de instancia

Son diferentes en definición y uso, y la diferencia más esencial son las diferentes ubicaciones almacenadas en la memoria.

  • Los atributos de instancia pertenecen a objetos
  • El atributo de clase pertenece a la clase

Ejemplo de código:

class Province(object):
    # 类属性
    country = '中国'

    def __init__(self, name):
        # 实例属性
        self.name = name


# 创建一个实例对象
obj = Province('山东省')
# 直接访问实例属性
print(obj.name)
# 直接访问类属性
Province.country

A partir del código anterior, se puede ver que [se debe acceder a los atributos de instancia a través de objetos] [se accede a los atributos de clase a través de clases]. En uso, se puede ver que los atributos de los atributos de instancia y los atributos de clase son diferentes.

El método de almacenamiento en el contenido es similar a la siguiente figura:

Atributo de clase, atributo de instancia

Puede verse en la figura anterior:

Solo se almacena una copia de los atributos de clase en la memoria y una copia de los
atributos de instancia se almacena en cada objeto.

Escenarios de aplicación:

Al crear un objeto de instancia a través de una clase, si cada objeto necesita un atributo con el mismo nombre, use el atributo de clase y use una copia.

Método de instancia, método estático y método de clase

Los métodos incluyen: métodos de instancia, métodos estáticos y métodos de clase,Los tres métodos pertenecen a la clase en memoria, la diferencia radica en los diferentes métodos de llamada.

  • Método de instancia: llamado por el objeto; al menos un parámetro self; cuando se ejecuta el método de instancia, el objeto que llama al método se asigna automáticamente a self;
  • Método de clase: llamado por la clase; al menos un parámetro de cls; cuando se ejecuta el método de clase, la clase que llama al método se asigna automáticamente a cls;
  • Método estático: llamado por la clase, sin parámetros predeterminados;

Ejemplo de código:

class Foo(object):
    def __init__(self, name):
        self.name = name

    def ord_func(self):
        """ 定义实例方法,至少有一个self参数 """
        # print(self.name)
        print('实例方法')

    @classmethod
    def class_func(cls):
        """ 定义类方法,至少有一个cls参数 """
        print('类方法')

    @staticmethod
    def static_func():
        """ 定义静态方法 ,无默认参数"""
        print('静态方法')



f = Foo("中国")
# 调用实例方法
f.ord_func()

# 调用类方法
Foo.class_func()

# 调用静态方法
Foo.static_func()

Métodos de clase, métodos de instancia, métodos estáticos

Comparado:

  • Similitud: para todos los métodos, pertenecen a la clase, por lo que solo se guarda una copia en la memoria
  • Diferencias: el llamador del método es diferente y los parámetros que se pasan automáticamente cuando se llama al método son diferentes.

Supongo que te gusta

Origin blog.csdn.net/weixin_42250835/article/details/89943985
Recomendado
Clasificación