O uso de classes em Python 2

Conforme mencionado em "Usando classes no Python 1", variáveis ​​e métodos de classe são divididos em variáveis ​​de classe (métodos de classe) e variáveis ​​de instância (métodos de instância). Então, qual é a relação entre essas duas variáveis ​​(métodos)? Pegue a classe MyClass mencionada em "Usando Classes em Python 1" como exemplo, seu código é o seguinte:

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

Entre eles, i e myfunc são variáveis ​​de classe e métodos de classe de MyClass, e j é uma variável de membro de MyClass.

1 Acessando variáveis ​​de classe por nome de instância

As variáveis ​​de classe são comuns a cada instância e as variáveis ​​de instância são exclusivas de cada instância.

Após definir MyClass, continue definindo duas instâncias desta classe, c1 e c2, o código é o seguinte:

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

Conforme mencionado em "Usando classes no Python 1", as variáveis ​​de classe podem ser usadas na forma de "nome da classe. nome da variável". Além deste método, as variáveis ​​de classe também podem ser usadas na forma de "nome da instância.nome da variável", o código é o seguinte:

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

Como todas as instâncias compartilham a variável de classe, a saída do código acima é 1.

Quando a variável de classe é modificada pelo nome da classe, o código é o seguinte

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

Como a variável de classe é compartilhada por cada instância, a saída neste momento é 2.

2 Modifique variáveis ​​de classe por nome de instância

Em "1 Acessando variáveis ​​de classe por meio de nomes de instância", é mencionado que variáveis ​​de classe podem ser usadas como "nome de instância.nome de variável" e variáveis ​​de classe também podem ser modificadas da mesma maneira. O código fica assim:

c1.i = 2
print(c1.i)

A saída neste momento é 2.

Deve-se notar que quando uma variável de classe é modificada através do método "nome da instância. nome da variável", é equivalente a recriar uma nova "variável de instância" para a instância sem afetar a variável de classe real. O código é o seguinte :

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

Ambas as saídas neste momento são "1".

3 Variáveis ​​de instância não podem ser usadas e modificadas pelo nome da classe

As variáveis ​​de classe podem ser usadas e modificadas pelo nome da instância, mas não vice-versa, ou seja, as variáveis ​​de instância não podem ser usadas e modificadas pelo método "nome da classe. nome da variável".

print(MyClass.j)

O código acima relatará um erro e a mensagem de erro é "AttributeError: type object 'MyClass' has no attribute 'j'", indicando que a classe MyClass não possui uma variável de classe denominada "j".

Acho que você gosta

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