Domanda

Sembra che io non capisco qualcosa con la dichiarazione --- pitone with.

Si consideri questa classe:

class test(object):
    def __enter__(self): pass
    def __exit__(self, *ignored): pass

Ora, quando lo si utilizza con with, come in

with test() as michael:
    print repr(michael)

mi sarei aspettato un po 'di output come . Ma ho Nessuno .

qualcosa che non va? Tutti i suggerimenti sarebbero utili.

(sto usando Python 2.6.6.)

Modifica

Grazie a ephement per me che punta alla documentazione. Il metodo __enter__ dovrebbe leggere

    def __enter__(self): return self
È stato utile?

Soluzione

with documentazione:

Se un obiettivo è stato incluso nella dichiarazione with, il valore restituito da __enter__() viene assegnato ad esso.

Se si def __enter__(self): return self, allora il vostro risultato previsto è prodotto.

Altri suggerimenti

la documentazione :

object.__enter__(self)

Inserisci il contesto di esecuzione relative a questo oggetto. La dichiarazione with legherà valore di ritorno di questo metodo per (s) specificati nella clausola as della dichiarazione del bersaglio, se presenti.

ho la stessa cosa per repr(michael)

Prova questo, invece:

m.__repr__()

Non sono del tutto sicuro, ma penso che abbia qualcosa a che fare con il fatto che non è stato definito il metodo repr nella classe test

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top