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 HtmlDocument
classe 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 HtmlDocument
classe possui duas variáveis de classe: extension
e 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 HtmlDocument
classe:
home = HtmlDocument()
Linguagem de código: Python ( python )
A home
é uma instância da HtmlDocument
classe. 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 home
objeto da mesma forma que HtmlDocument.__dict__
armazena as variáveis de classe da HtmlDocument
classe.
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 version
variável no home
objeto:
home.version = 6
Linguagem de código: Python ( python )
Python adiciona a version
variável ao __dict__
atributo do home
objeto:
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 home
objeto, o Python retornará o valor de the version
no home.__dict__
dicionário:
print(home.version)
Linguagem de código: Python ( python )
Saída:
6
Linguagem 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/html
Linguagem 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 HtmlDocument
classe que possui duas variáveis de instância name
econtents
class HtmlDocument:
version = 5
extension = 'html'
def __init__(self, name, contents):
self.name = name
self.contents = contents
Linguagem 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.