Resumo : neste tutorial, você aprenderá como funcionam as variáveis (ou atributos) da classe Python.
Introdução às variáveis de classe Python
Tudo em Python é um objeto incluindo uma classe . Em outras palavras, uma classe é um objeto em Python.
Quando você define uma classe usando a class
palavra-chave, Python cria um objeto com o mesmo nome da classe. Por exemplo:
class HtmlDocument:
pass
Linguagem de código: Python ( python )
Este exemplo define a HtmlDocument
classe e o HtmlDocument
objeto. O HtmlDocument
objeto tem a __name__
propriedade:
print(HtmlDocument.__name__) # HtmlDocument
Linguagem de código: Python ( python )
E HTMLDocument
tem o tipo de type
:
print(type(HtmlDocument)) # <class 'type'>
Linguagem de código: Python ( python )
Também é uma instância da type
classe:
print(isinstance(HtmlDocument, type)) # True
Linguagem de código: Python ( python )
Variáveis de classe estão vinculadas à classe. Eles são compartilhados por todas as instâncias dessa classe.
O exemplo a seguir adiciona as variáveis de classe extension
e version
à HtmlDocument
classe:
class HtmlDocument:
extension = 'html'
version = '5'
Linguagem de código: Python ( python )
Ambos extension
e version
são as variáveis de classe da HtmlDocument
classe. Eles estão vinculados à HtmlDocument
classe.
Obtenha os valores das variáveis de classe
Para obter os valores das variáveis de classe, você usa a notação de ponto ( .
). Por exemplo:
print(HtmlDocument.extension) # html
print(HtmlDocument.version) # 5
Linguagem de código: Python ( python )
Se você acessar uma variável de classe que não existe, receberá uma AttributeError
exceção. Por exemplo:
HtmlDocument.media_type
Linguagem de código: Python ( python )
Erro:
AttributeError: type object 'HtmlDocument' has no attribute 'media_type'
Linguagem de código: Python ( python )
Outra maneira de obter o valor de uma variável de classe é usar a getattr()
função. A getattr()
função aceita um objeto e um nome de variável. Ele retorna o valor da variável de classe. Por exemplo:
extension = getattr(HtmlDocument, 'extension')
version = getattr(HtmlDocument, 'version')
print(extension) # html
print(version) # 5
Linguagem de código: Python ( python )
Se a variável de classe não existir, você também receberá uma AttributeError
exceção. Para evitar a exceção, você pode especificar um valor padrão se a variável de classe não existir assim:
media_type = getattr(HtmlDocument, 'media_type', 'text/html')
print(media_type) # text/html
Linguagem de código: Python ( python )
Definir valores para variáveis de classe
Para definir um valor para uma variável de classe, você usa a notação de ponto:
HtmlDocument.version = 10
Linguagem de código: Python ( python )
ou você pode usar a setattr()
função integrada:
setattr(HtmlDocument, 'version', 10)
Linguagem de código: Python ( python )
Como Python é uma linguagem dinâmica, você pode adicionar uma variável de classe a uma classe em tempo de execução após criá-la. Por exemplo, o seguinte adiciona a media_type
variável de classe à HtmlDocument
classe:
HtmlDocument.media_type = 'text/html'
print(HtmlDocument.media_type)
Linguagem de código: Python ( python )
Da mesma forma, você pode usar a setattr()
função:
setattr(HtmlDocument, media_type, 'text/html')
print(HtmlDocument.media_type)
Linguagem de código: Python ( python )
Excluir variáveis de classe
Para excluir uma variável de classe em tempo de execução, você usa a delattr()
função:
delattr(HtmlDocument, 'version')
Linguagem de código: Python ( python )
Ou você pode usar a del
palavra-chave:
del HtmlDocument.version
Linguagem de código: Python ( python )
Armazenamento variável de classe
Python armazena variáveis de classe no __dict__
atributo. O __dict__
é um proxy de mapeamento, que é um dicionário. Por exemplo:
from pprint import pprint
class HtmlDocument:
extension = 'html'
version = '5'
HtmlDocument.media_type = 'text/html'
pprint(HtmlDocument.__dict__)
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',
'media_type': 'text/html',
'version': '5'})
Linguagem de código: Python ( python )
Conforme mostrado claramente na saída, __dict__
possui três variáveis de classe: extension
, media_type
e version
além de outras variáveis de classe predefinidas.
Python não permite que você altere __dict__
diretamente. Por exemplo, o seguinte resultará em um erro:
HtmlDocument.__dict__['released'] = 2008
Linguagem de código: Python ( python )
Saída:
TypeError: 'mappingproxy' object does not support item assignment
Linguagem de código: Python ( python )
No entanto, você pode usar a setattr()
notação de função ou ponto para alterar indiretamente o __dict__
atributo.
Além disso, a chave de __dict__
são strings que ajudarão o Python a acelerar a pesquisa de variáveis.
Embora o Python permita acessar variáveis de classe através do __dict__
dicionário, não é uma boa prática. Além disso, não funcionará em algumas situações. Por exemplo:
print(HtmlDocument.__dict__['type']) # BAD CODE
Linguagem de código: Python ( python )
Atributos de classe que podem ser chamados
Os atributos de classe podem ser qualquer objeto, como uma função.
Quando você adiciona uma função a uma classe, a função se torna um atributo de classe. Como uma função pode ser chamada, o atributo de classe é chamado de atributo de classe que pode ser chamado. Por exemplo:
from pprint import pprint
class HtmlDocument:
extension = 'html'
version = '5'
def render():
print('Rendering the Html doc...')
pprint(HtmlDocument.__dict__)
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',
'render': <function HtmlDocument.render at 0x0000010710030310>,
'version': '5'})
Rendering the Html doc...
Linguagem de código: Python ( python )
Neste exemplo, the render
é um atributo de classe da HtmlDocument
classe. Seu valor é uma função.
Resumo
- Uma classe é um objeto que é uma instância da classe de tipo.
- Variáveis de classe são atributos do objeto de classe.
- Use notação de ponto ou
getattr()
função para obter o valor de um atributo de classe. - Use notação de ponto ou
setattr()
função para definir o valor de um atributo de classe. - Python é uma linguagem dinâmica. Portanto, você pode atribuir uma variável de classe a uma classe em tempo de execução.
- Python armazena variáveis de classe no
__dict__
atributo. O__dict__
atributo é um dicionário.