8.12 Para Saber Mais: Outros Métodos De Uma Classe
O interpretador adiciona alguns atributos especiais somente para leitura a vários tipos de objetos de uma classe, sendo um deles o dict .
Isso acontece porque a classe Conta possui alguns métodos, dentre eles o init () e o
new () , que são chamados para criar e inicializar um objeto desta classe, respectivamente. Caso você queira saber quais outros métodos são implementados pela classe Conta , você pode usar a função embutida dir() , que irá listar todos métodos e atributos que a classe possui.
dir(Conta)
[’ class ’, ’ delattr ’, ’ dict ’, ’ dir ’, ’ doc ’, ’ eq ’,
’ format ’, ’ ge ’, ’ getattribute ’, ’ gt ’, ’ hash ’, ’ init ’, ’ init_subclass ’, ’_
_le ’, ’ lt ’, ’ module ’, ’ ne ’, ’ new ’, ’ reduce ’, ’ reduce_ex ’, ’ repr ’, ’ se tattr ’, ’ sizeof ’, ’ str ’, ’ subclasshook ’, ’ weakref ’, ‘extrato’, ‘deposita’, ‘limite’
, ‘numero’, ‘saca’, ‘saldo’, ‘transfere_para’, ‘titular’]
Dessa lista, já conhecemos o init () , o new () e os métodos e atributos que definimos quando construímos a classe Conta . Na verdade, quando usamos a função dir() , o interpretador
chama o atributo dir dessa lista. Um outro atributo bastante útil é o dict , que retorna um
dicionário com os atributos da classe.
cliente = Cliente(‘João’, ‘Oliveira’, ‘111111111-11’) conta = Conta(‘123-4’, cliente, 1000.0)
print(conta. dict )#{‘saldo’: 1000.0, ‘numero’: ‘123-4’, ‘titular’: < main .Cliente object at 0x7 f0b6d028f28>, ‘limite’: 1000.0}
Mas não é comum acessá-lo dessa maneira. Esses métodos iniciados e terminados com dois
underscores são chamados pelo interpretador, e são conhecidos como métodos mágicos. Existe outra
função embutida do Python, a função vars() , que chama exatamente o dict
Obtemos o mesmo resultado usando vars(conta) :
de uma classe.
vars(conta)
#{‘saldo’: 1000.0, ‘numero’: ‘123-4’, ‘titular’: < main .Cliente object at
x7f0b6d028f28>, ‘limite’: 1000.0}
Repare que o dict e o vars() retornam exatamente um dicionário de atributos de uma conta como tínhamos modelado no início deste capítulo. Portanto, nossas classes utilizam dicionários para armazenar informações da própria classe.
Os demais métodos mágicos estão disponíveis para uso e não utilizaremos por enquanto. Voltaremos a falar deles em um outro momento.