Une technique trouvée dans un certain OSS.
bs = BookShelf('Introduction à XX', 'Première fois YY', 'ZZ je n'entends plus')
bs.map_(lambda: print(this))
stdout
Introduction à XX
Première fois YY
ZZ je n'entends plus
«Ceci» qui est apparu soudainement. D'où vient-il?
J'y travaillais avant d'appeler le rappel.
class Book:
def __init__(self, name):
self._name = name
def __str__(self):
return self._name
class BookShelf:
def __init__(self, *book_names):
self._books = [*map(Book, book_names)]
def map_(self, callback):
for book in self._books:
callback.__globals__['this'] = book
callback()
del callback.__globals__['this']
Ce n'est pas grave si vous le comprenez, J'étais inquiet pendant un moment car je doutais de l'extension de l'interprète et de l'IDE.
Je pense que c'est Pythonic de le passer comme un argument comme celui-ci:
class BookShelf:
def __init__(self, *book_names):
self._books = [*map(Book, book_names)]
def map_(self, callback):
for book in self._books:
callback(book)
bs = BookShelf('Introduction à XX', 'Première fois YY', 'ZZ je n'entends plus')
bs.map_(lambda this: print(this))
Je veux bien prendre soin de Zen of Python.
Explicit is better than implicit. Il vaut mieux clarifier que suggérer.
** Référence **: Qiita - Le Zen de Python
Recommended Posts