Variáveis ​​​​de instância Python

Resumo : neste tutorial, você aprenderá sobre variáveis ​​de instância do Python, incluindo variáveis ​​de dados e variáveis ​​de função.

Introdução às variáveis ​​de instância do Python

Em Python, as variáveis ​​de classe estão vinculadas a uma classe , enquanto as variáveis ​​de instância estão vinculadas a uma instância específica de uma classe. As variáveis ​​de instância também são chamadas de atributos de instância.

O seguinte define uma HtmlDocumentclasse com duas variáveis ​​de classe:

from pprint import pprint


class HtmlDocument:
    version = 5
    extension = 'html'


pprint(HtmlDocument.__dict__)

print(HtmlDocument.extension)
print(HtmlDocument.version)Linguagem de código:  Python  ( python )

Saída:

mappingproxy({'__dict__': <attribute '__dict__' of 'HtmlDocument' objects>,
              '__doc__': None,
              '__module__': '__main__',
              '__weakref__': <attribute '__weakref__' of 'HtmlDocument' objects>,
              'extension': 'html',
              'version': 5})Linguagem de código:  Python  ( python )

A HtmlDocumentclasse possui duas variáveis ​​de classe: extensione version. Python armazena essas duas variáveis ​​no __dict__atributo.

Quando você acessa as variáveis ​​de classe através da classe, o Python as procura no arquivo __dict__da classe.

O seguinte cria uma nova instância da HtmlDocumentclasse:

home = HtmlDocument()Linguagem de código:  Python  ( python )

A homeé uma instância da HtmlDocumentclasse. Tem seu próprio __dict__atributo:

pprint(home.__dict__)Linguagem de código:  Python  ( python )

O home.__dict__agora está vazio:

{}Linguagem de código:  Python  ( python )

Armazena home.__dict__as variáveis ​​de instância do homeobjeto da mesma forma que HtmlDocument.__dict__armazena as variáveis ​​de classe da HtmlDocumentclasse.

Ao contrário do __dict__atributo de uma classe, o tipo do __dict__atributo de uma instância é um dicionário . Por exemplo:

print(type(home.__dict__))Linguagem de código:  Python  ( python )

Saída:

<class 'dict'>Linguagem de código:  Python  ( python )

Como um dicionário é mutável , você pode alterá-lo, por exemplo, adicionando um novo elemento ao dicionário.

Python permite acessar as variáveis ​​de classe a partir de uma instância de uma classe. Por exemplo:

print(home.extension)
print(home.version)Linguagem de código:  Python  ( python )

Nesse caso, o Python procura home.__dict__primeiro a extensão e a versão das variáveis. Se não os encontrar lá, ele irá até a turma e procurará no arquivo HtmlDocument.__dict__.

No entanto, se o Python puder encontrar as variáveis ​​na __dict__instância, ele não procurará mais na __dict__classe.

O seguinte define a versionvariável no homeobjeto:

home.version = 6Linguagem de código:  Python  ( python )

Python adiciona a versionvariável ao __dict__atributo do homeobjeto:

print(home.__dict__)Linguagem de código:  Python  ( python )

O __dict__now contém uma variável de instância:

{'version': 6}Linguagem de código:  Python  ( python )

Se você acessar o atributo version do homeobjeto, o Python retornará o valor de the versionno home.__dict__dicionário:

print(home.version)Linguagem de código:  Python  ( python )

Saída:

6Linguagem de código:  Python  ( python )

Se você alterar as variáveis ​​de classe, essas alterações também serão refletidas nas instâncias da classe:

HtmlDocument.media_type = 'text/html'
print(home.media_type)Linguagem de código:  Python  ( python )

Saída:

text/htmlLinguagem de código:  Python  ( python )

Inicializando variáveis ​​de instância

Na prática, você inicializa variáveis ​​de instância para todas as instâncias de uma classe no __init__método.

Por exemplo, o seguinte redefine a HtmlDocumentclasse que possui duas variáveis ​​de instância nameecontents

class HtmlDocument:
    version = 5
    extension = 'html'

    def __init__(self, name, contents):
        self.name = name
        self.contents = contentsLinguagem de código:  Python  ( python )

Ao criar uma nova instância do HtmlDocument, você precisa passar os argumentos correspondentes como este:

blank = HtmlDocument('Blank', '')Linguagem de código:  Python  ( python )

Resumo

  • Variáveis ​​de instância estão vinculadas a uma instância específica de uma classe.
  • Python armazena variáveis ​​de instância no __dict__atributo da instância. Cada instância tem seu próprio atributo __dict__ e as chaves __dict__podem ser diferentes.
  • Quando você acessa uma variável por meio da instância, o Python encontra a variável no __dict__atributo da instância. Se não conseguir encontrar a variável, sobe e procura no __dict__atributo da classe.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *