Segue o exemplo de uma classe em Python que abstrai uma pessoa.
Nesse exemplo também são usadas properties e são definidos métodos para apresentação dos dados nos formatos: CSV, JSON e XML.
#!/usr/bin/env python
#-*- encoding: utf-8 -*-
# Autor: Thiago Alexandre Martins Monteiro
# Local: Goiânia/Goiás/Brasil
# Data: 01/11/2012
class Pessoa(object):
"""
Classe que é uma abstração computacional da entidade pessoa no mundo real.
"""
def __init__(self, nome='', sobrenome='', idade=0):
"""
Construtor da classe.
"""
self.__nome = nome
self.__sobrenome = sobrenome
self.__idade = idade
# getters
def get_nome(self):
"""
Método que retorna o nome da pessoa.
"""
return self.__nome
def get_sobrenome(self):
"""
Método que retorna o sobrenome da pessoa.
"""
return self.__sobrenome
def get_idade(self):
"""
Método que retorna a idade da pessoa.
"""
return self.__idade
# setters
def set_nome(self, nome):
"""
Método que define o nome da pessoa.
"""
self.__nome = nome
def set_sobrenome(self, sobrenome):
"""
Método que define o sobrenome da pessoa.
"""
self.__sobrenome = sobrenome
def set_idade(self, idade):
"""
Método que define a idade da pessoa.
"""
self.__idade = idade
def to_csv(self):
"""
Método que retorna o estado de um objeto (os valores armazenados em seus atributos)
no formato CSV (Comma Separated Values - Valores Separados por Vírgulas).
"""
csv_out = ''
for v in self.__dict__.values():
csv_out += '%s,' % v
csv_out = csv_out[:-1]
return csv_out
def to_xml(self):
"""
Método que retorna o estado de um objeto no formato XML (Extensible Markup Language - Linguagem de Marcação
Extensível).
"""
open_tag = '<%s>' % self.__class__.__name__.lower()
close_tag = '</%s>' % self.__class__.__name__.lower()
xml_out = open_tag
for k, v in self.__dict__.items():
xml_out += '<%s>%s</%s>' % (k.lower(), v, k.lower())
xml_out += close_tag
xml_out = xml_out.replace('_%s__' % (self.__class__.__name__.lower()), '')
return xml_out
def to_json(self):
"""
Método que retorna o estado de um objeto no formato JSON (JavaScript Object Notation - Notação de Objetos
JavaScript).
"""
json_out = '{'
for k, v in self.__dict__.items():
if type(v).__name__ == 'int':
json_out += "'%s': %d, " % (k, v)
else:
json_out += "'%s': '%s', " % (k, v)
# Retira vírgula e espaço em branco do último par (atributo: valor) do objeto.
json_out = '%s%s' % (json_out[:-2], '}')
json_out = json_out.replace('_%s__' % self.__class__.__name__, '')
return json_out
def __repr__(self):
return 'Nome completo: %s %s \nIdade: %d' % (self.get_nome(), self.get_sobrenome(), self.get_idade())
# properties
nome = property(get_nome, set_nome, doc='Propriedade para retorno e definição do nome da pessoa.')
sobrenome = property(get_sobrenome, set_sobrenome, doc='Propriedade para retorno e definição do sobrenome da pessoa.')
idade = property(get_idade, set_idade, doc='Propriedade para retorno e definição da idade da pessoa.')
if __name__ == '__main__':
import os
os.system('clear')
p = Pessoa('Thiago Alexandre', 'Martins Monteiro', 29)
print p
p.nome = 'Joe'
p.sobrenome = 'Satriani'
p.idade = 56
print p
print '\n\033[033mAPRESENTANDO OS DADOS DA PESSOA EM DIVERSOS FORMATOS\033[0m'
print '1 - CSV'
print p.to_csv()
print '2 - XML'
print p.to_xml()
print '3 - JSON'
print p.to_json()