2017-04-13 1 views
5

Fondamentalement, au lieu de cela:Est-il possible de changer les dictons locaux?

context1.a 
context1.b() 
context2.a 
context2.b() 

Je veux écrire:

with context1(): 
    a 
    b() 

with context2(): 
    a 
    b() 

Idéalement je referais ce en déconnectant les « locaux dictionnaire » avec un objet avec une coutume __get__, mais je Je ne sais pas comment faire cela ou si c'est même possible. Pourquoi ?: J'ai implémenté une sorte de répartition des prédicats (pour le fun), mais je ne peux utiliser qu'en nommant explicitement le contexte à chaque fois: context.a() + context.b() est ennuyeux d'écrire tout le temps.

+5

Je pense vraiment que vous essayez de résoudre un problème de la manière la plus difficile possible. Pourquoi ne pouvez-vous pas simplement créer une fonction qui les appelle comme nécessaire? –

+0

Est-ce censé être comme Javascript 'with'? Ce n'est même pas une bonne idée en Javascript; c'est obsolète, et interdit en mode strict. – user2357112

Répondre

0

Ne faites pas cela. Juste parce qu'une machine de Turing peut faire quelque chose ne signifie pas que c'est un bon moyen de communiquer votre intention aux gens. Simplement s'en tenir à la syntaxe standard, puis votre code sera clair pour les autres ingénieurs.

with context1() as c: 
     c.a 
     c.b()