Olá,
No código
def __envia_por_email(self, nota_fiscal):
print 'enviando nota por e-mail...'
um dos parâmetros passados para o método é nota_fiscal. Ele seria uma instância da classe Nota_Fiscal? Por que não poderia fazer da forma abaixo?
def __envia_por_email(self):
print 'enviando nota por e-mail... %s' % (self.__cnpj)