El uso de clases en Python 2

Como se mencionó en "Uso de clases en Python 1", las variables y métodos de clase se dividen en variables de clase (métodos de clase) y variables de instancia (métodos de instancia). Entonces, ¿cuál es la relación entre estas dos variables (métodos)? Tome la clase MyClass mencionada en "Uso de clases en Python 1" como ejemplo, su código es el siguiente:

class MyClass:
    i = 1
    def myfunc():
        print('Hello')
    def __init__(self, num):
        self.j = num

Entre ellos, i y myfunc son variables de clase y métodos de clase de MyClass, y j es una variable miembro de MyClass.

1 Acceder a las variables de clase por nombre de instancia

Las variables de clase son comunes a cada instancia y las variables de instancia son únicas para cada instancia.

Después de definir MyClass, continúe definiendo dos instancias de esta clase, c1 y c2, el código es el siguiente:

c1 = MyClass(10)
c2 = MyClass(100)

Como se mencionó en "Uso de clases en Python 1", las variables de clase se pueden usar en forma de "nombre de clase. nombre de variable". Además de este método, las variables de clase también se pueden usar en la forma de "nombre de instancia.nombre de variable", el código es el siguiente:

print(c1.i)
print(c2.i)

Debido a que todas las instancias comparten la variable de clase, el resultado del código anterior es 1.

Cuando la variable de clase se modifica por el nombre de clase, el código es el siguiente

MyClass.i = 2
print(c1.i)
print(c2.i)

Debido a que la variable de clase es compartida por cada instancia, la salida en este momento es 2.

2 Modificar variables de clase por nombre de instancia

En "1 Acceder a variables de clase a través de nombres de instancia", se menciona que las variables de clase se pueden usar de la misma manera que "nombre de instancia.nombre de variable", y las variables de clase también se pueden modificar de la misma manera. El código se ve así:

c1.i = 2
print(c1.i)

La salida en este momento es 2.

Cabe señalar que cuando se modifica una variable de clase mediante el método de "nombre de instancia. nombre de variable", es equivalente a recrear una nueva "variable de instancia" para la instancia sin afectar la variable de clase real. El código es el siguiente :

c1.i = 2
print(MyClass.i)
print(c2.i)

Ambas salidas en este momento son "1".

3 Las variables de instancia no se pueden usar y modificar a través del nombre de la clase

Las variables de clase pueden ser usadas y modificadas por el nombre de instancia, pero no al revés, es decir, las variables de instancia no pueden ser usadas y modificadas por el método de "nombre de clase. nombre de variable".

print(MyClass.j)

El código anterior informará un error, y el mensaje de error es "AttributeError: tipo de objeto 'MyClass' no tiene atributo 'j'", lo que indica que la clase MyClass no tiene una variable de clase denominada "j".

Supongo que te gusta

Origin blog.csdn.net/hou09tian/article/details/131224023
Recomendado
Clasificación