2010-11-10 6 views
3

Possible en double:
Dynamic Finders and Method Missing in PythonEn Python, comment pouvez-vous répondre aux appels de méthodes qui n'existent pas sur un objet?

Je sais que vous pouvez le faire en Ruby, mais comment serait-il fait en Python?

Donc, fondamentalement, vous pourriez peut-être à une regex sur l'appel de la méthode qui n'existait pas, et créer du «sucre syntaxique».

+2

http://stackoverflow.com/questions/913020/dynamic-finders-and-method-missing-in-python – ameer

+0

@ameer: ​​Merci d'avoir trouvé cela. Voter pour fermer en double. –

Répondre

1

Vous pouvez remplacer __getattribute__ sur un objet pour gérer les demandes d'attributs qui n'existent pas. Cela ne fonctionne que pour les classes de style nouveau. Si vous avez des classes de style ancien, vous pouvez utiliser delnans answer.

+1

Terminologie nitpicking: Il n'y a pas de surcharge (comme dans http://en.wikipedia.org/wiki/Method_overloading) en Python ou en Ruby. Seulement écrasant. – delnan

+0

@delnan: Merci, corrigé. –

+2

'__getattribute__' est appelée sur toutes les recherches d'attributs. La réponse de delnan est correcte pour les classes nouvelles et anciennes. –

2

Define __getattr__.

Mais cela ne peut toujours pas faire s./.*/ une syntaxe valide, si c'est ce que vous avez à l'esprit. La syntaxe de Python n'est nulle part aussi flexible que celle de Ruby.

+0

vraiment? Pour une raison quelconque, j'ai pensé que ce serait très très similaire – Blankman

+2

Vous ne pouvez pas * ajouter * à la syntaxe de Python. Le sucre de syntaxe non standard est généralement bon pour empêcher d'autres personnes de comprendre votre code. –

+0

@Blankman: Non. Python veut être simple et ne ressemble pas à Perl, donc sa grammaire est plus simple que celle de Ruby. – Philipp

Questions connexes