2014-04-26 10 views
16

Ich versuche, Python zu lernen, und ich landete auf dem, um herauszufinden, wie die Konstruktion in Python funktioniert ‚with..as‘

with..as

Konstrukt, das verwendet dies wie:

with open("somefile.txt", 'rt') as file: 
    print(file.read()) 
    # at the end of execution file.close() is called automatically. 

so als Lernstrategie versuchte ich folgendes zu tun:

und ich habe diese Ausgabe:

__enter__ 
None 
__exit__ 

Meine Frage ist dann:

  • warum hat print(derived) Rückkehr ein None Objekt und kein Derived Objekt?
+2

'__enter__' muss das Objekt zurückgeben, das an' dervied' gebunden ist. – Daniel

Antwort

17

Der Name wird derived an dem vom __enter__ Methode, die None zurückgegeben Objekt gebunden. Versuchen:

def __enter__(self): 
    print('__enter__') 
    return self 

Docs:

object.__enter__(self)

den Laufzeitkontext Geben Sie zu diesem Objekt beziehen. Die with-Anweisung bindet den Rückgabewert dieser Methode an die Ziele, die in der as-Klausel der Anweisung angegeben sind, falls vorhanden.

+0

Ich schaute überall hin, wo ich das nirgends lesen konnte? Wie konnte ich es herausgefunden haben? Gibt es ein Handbuch, in dem diese Anforderung erläutert wird? – Kam

+2

@Kam Mit der Dok.-Referenz aktualisiert –

Verwandte Themen