Na parte de apresentação do padrão de projeto "Observer", o professor começa com esse código:
# nota_fiscal.py
from datetime import date
class Item(object):
# código omitido
class Nota_fiscal(object):
def __init__(self, razao_social, cnpj, itens, data_de_emissao=date.today(), detalhes=''):
self.__razao_social = razao_social
self.__cnpj = cnpj
self.__data_de_emissao = data_de_emissao
if len(detalhes) > 20:
raise Exception('Detalhe da nota superior à 20 caracteres!')
self.__detalhes = detalhes
self.__itens = itens
# chamando os métodos
self.__envia_por_email(self)
self.__salva_no_banco(self)
self.__imprime(self)
def __envia_por_email(self, nota_fiscal):
print 'enviando nota por e-mail...'
def __salva_no_banco(self, nota_fiscal):
print 'salvando no banco...'
def __imprime(self, nota_fiscal):
print 'imprimindo ...'
# demais métodos omitidos
if __name__ == '__main__':
itens=[
Item(
descricao='ITEM A',
valor=100
),
Item(
descricao='ITEM B',
valor=200
)
]
nota_fiscal = Nota_fiscal(
cnpj='012345678901234',
razao_social='FHSA Limitada',
itens=itens
)
Porém, não ficou claro porque os métodos "observers" (ou que virarão "observers") estão escritos para receber (self, nota_fiscal). Não seria suficiente pedir apenas (self) e usar o seu próprio self._notafiscal?