Par exemple, lors de la déclaration de class-based-view dans django, même s'il s'agit d'une classe similaire Quoi qu'il en soit, c'est un problème à déclarer à chaque fois! Y a-t-il quelque chose comme ça? J'ai.
Donc, il y a quelque chose qui s'appelle une «fonction plus proche» là-bas. Un exemple est ci-dessous. En Python, vous pouvez écrire comme ci-dessous.
python
# -*- coding: utf-8 -*-
def closure_factory(number):
def _closure(some_integer):
return number * some_integer
return _closure
def closure_test():
for x in range(10):
func = closure_factory(x)
for y in range(10):
print func(y)
if __name__ == '__main__':
closure_test()
Dans ce cas, il est abstrait sous la forme de "fonction à multiplier par n", en fait "combien de fois la fonction est nécessaire" est créé avec fermeture_factory
, puis il est exécuté. Il est en forme.
Je ne sais pas parce que je n'ai pas vu le comportement de Python en détail, mais il semble que la classe est générée au "timing déclaré". Par conséquent, il est possible de déclarer une classe comme une fermeture comme indiqué ci-dessous.
python
# -*- coding: utf-8 -*-
def testfactory(hoge):
class TestClass(object):
number = hoge
def say(self):
print self.number
return TestClass
def main():
for x in range(30):
klass = testfactory(x)
klass().say()
Ce qui me rend heureux lorsque je crée une fabrique de classes comme celle-ci, c'est que lorsque je crée une classe où je n'ai besoin que de modifier certains paramètres, je n'ai pas à déclarer à chaque fois, et je déclare uniquement les parties modifiées des paramètres. Il y a un mérite que vous pouvez améliorer simplement en le donnant (probablement).
Cependant, d'un autre côté, si cette usine est appelée plusieurs fois, ce qui va arriver aux performances de traitement peut être fastidieux, donc cela peut dépendre du moment d'utilisation.