2014-04-26 3 views
16

Sto cercando di imparare Python e sono atterrato sulCercando di capire come costruire il 'with..as' opera in pitone

with..as

costrutto, quella utilizzata in questo modo:

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

Così come una strategia di apprendimento ho cercato di fare quanto segue:

ed ho ottenuto questo output:

__enter__ 
None 
__exit__ 

La mia domanda è allora:

  • perché ha fatto print(derived) restituire un oggetto None e non un oggetto Derived?
+2

'__enter__' deve restituire l'oggetto associato a' dervied'. – Daniel

risposta

17

Il nome derived è vincolata all'oggetto restituito dal metodo __enter__, che è None. Prova:

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

Docs:

object.__enter__(self)

immettere il contesto di esecuzione relative a questo oggetto. L'istruzione with associa il valore restituito di questo metodo alle destinazioni specificate nella clausola as dell'istruzione, se presente.

+0

Ho cercato ovunque che non potessi leggerlo da nessuna parte? Come ho potuto capire? c'è un manuale che spiega questo requisito da qualche parte? – Kam

+2

@Kam Aggiornato con il riferimento del documento –

Problemi correlati