2017-04-13 2 views
5

Grundsätzlich statt dessen:Ist es möglich, das lokale Diktat zu ändern?

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

Ich möchte schreiben:

with context1(): 
    a 
    b() 

with context2(): 
    a 
    b() 

Idealerweise würde ich dies die durch den Wechsel aus tun „Einheimischen-Wörterbuch“ mit einem Objekt mit einem benutzerdefinierten __get__, aber ich Mir ist nicht bewusst, wie das geht oder ob es überhaupt möglich ist.

Warum ?: Ich habe eine Art Prädikat Dispatching (zum Spaß) implementiert, aber ich kann nur verwenden, indem Sie den Kontext jedes Mal explizit benennen: context.a() + context.b() ist nervig, die ganze Zeit zu schreiben.

+5

Ich denke definitiv, dass Sie versuchen, ein Problem auf die härteste Weise zu lösen. Warum können Sie nicht einfach eine Funktion erstellen, die diese als notwendig aufruft? –

+0

Soll das wie Javascript 'mit' sein? Das ist nicht einmal eine gute Idee in Javascript; Es ist veraltet und im strikten Modus verboten. – user2357112

Antwort

0

Tun Sie das nicht. Nur weil eine Turing-Maschine etwas tun kann, bedeutet das nicht, dass das eine gute Möglichkeit ist, Ihre Absicht Leuten mitzuteilen.

Halten Sie sich einfach an die Standardsyntax, und dann wird Ihr Code anderen Ingenieuren klar sein.

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