Encapisulamento e Meta Programação com Luciano Ramanho

Código:
#!/usr/bin/env python
# coding: utf-8

'''
O equivalente do "method_missing" do Ruby pode ser implementado em Python
usando o método __getattr__ que é invocado quando um atributo que não existe
é acessado. Eis uma implementação bem elementar::

    >>> b = Bicho()
    >>> print b.piar()
    piu!
    >>> print b.piar(3)
    piu! piu! piu!
    >>> print b.urrar() # este método não existe
    urru!
    >>> print b.urrar(2)
    urru! urru!
    
'''

class Bicho(object):
    
    def piar(self, vezes=1):
        return ('piu! ' * vezes).strip()

    def fazer_barulho(self, som, vezes):
        barulho = (som+'!').replace('ar!', 'u!')
        return ((barulho+' ') * vezes).strip()
        
    def __getattr__(self, nome):
        def sonar(vezes=1):
            return self.fazer_barulho(nome, vezes)
        return sonar
    
if __name__=='__main__':
    import doctest
    doctest.testmod()

Vídeo: http://www.youtube.com/watch?v=ZUjvlsc7VLc
Códigos: http://code.google.com/p/propython/source/browse/fundamentos/metaprog/method_missing.py

__getattr__ (Dander gerater)

getattr(objeto,"nom_do_metodo")

Comentários

Postagens mais visitadas deste blog

Rails CanCan

Meus insights mais valiosos sobre criptomoedas para 2018 e além

Como pegar a senha do Whatsapp de um Android ou Iphone