2016-06-05 33 views
9

Se definiamo __str__ metodo in una classe:Come convertire un oggetto di classe personalizzato in una tupla in Python?

class Point(): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 


    def __str__(self, key): 
     return '{},{}'.format(self.x, self.y) 

Così siamo in grado di convertire il suo oggetto a str subito:

a = Point(1, 1) 
b = str(a) 
print(b) 

Ma per quanto ne so, non c'è ad esempio __tuple__ metodo magico, quindi non so come definire una classe che può passare a tuple() in modo che possiamo convertire immediatamente il suo oggetto in tupla.

+4

Forniscici un esempio di codice di qualcosa che desideri convertire in una tupla in modo che possiamo aiutarti. Controlla anche questo: http://stackoverflow.com/questions/12836128/python-convert-list-to-tuple -> È specifico per gli elenchi ma potrebbe aiutarti. –

risposta

13

La "funzione" tuple (è davvero un tipo, ma ciò significa che è possibile chiamarla come una funzione) prenderà qualsiasi iteratore, incluso un iteratore, come argomento. Quindi se vuoi convertire il tuo oggetto in una tupla, assicurati che sia iterable. Ciò significa implementare un metodo __iter__, che dovrebbe restituire un iteratore. per esempio.

>>> class SquaresTo: 
...  def __init__(self, n): 
...   self.n = n 
...  def __iter__(self): 
...   for i in range(self.n): 
...    yield i * i 
... 
>>> s = SquaresTo(5) 
>>> tuple(s) 
(0, 1, 4, 9, 16) 
>>> list(s) 
[0, 1, 4, 9, 16] 
>>> sum(s) 
30 

Si può vedere dall'esempio che diverse funzioni Python/tipi richiederà un iterabile come argomento e utilizzare la sequenza di valori che esso genera nella produzione di un risultato.

+0

Trovo che possiamo [definire il metodo '__getitem__' per rendere la classe iterabile] (http://stackoverflow.com/questions/926574/why-does-defining-getitem-on-a-class-make-it-iterable- in-python). – acgtyrant

+0

Ho spiegato i protocolli di iterazione in [un discorso a PyData London] (https://github.com/steveholden/iteration) all'inizio di quest'anno. Potrebbe essere d'aiuto - c'è anche [un video della sessione] (https://www.youtube.com/watch?v=iTwrF1DofCY). – holdenweb