2016-06-05 11 views
9

Wenn wir definieren __str__ Methode in einer Klasse:Wie konvertiert man ein benutzerdefiniertes Klassenobjekt in ein Tupel 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) 

So können wir sein Objekt konvertieren sofort auf str:

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

Aber soweit ich weiß, gibt es keine solche __tuple__ magische Methode, Ich weiß also nicht, wie man eine Klasse definiert, die an tuple() übergeben werden kann, so dass wir ihr Objekt sofort in Tupel konvertieren können.

+4

Geben Sie uns einen Beispielcode für etwas, das Sie in ein Tupel konvertieren möchten, damit wir Ihnen helfen können. Überprüfen Sie auch dies: http://stackoverflow.com/questions/12836128/python-convert-list-to-tuple -> Es ist spezifisch für Listen, aber es könnte Ihnen helfen. –

Antwort

13

Die tuple "Funktion" (es ist wirklich ein Typ, aber das heißt, Sie können es wie eine Funktion nennen) wird jedes iterable, einschließlich eines Iterators, als sein Argument nehmen. Wenn Sie also Ihr Objekt in ein Tupel konvertieren wollen, stellen Sie sicher, dass es iterierbar ist. Dies bedeutet, dass eine __iter__ Methode implementiert wird, die einen Iterator zurückgeben soll. z.B.

>>> 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 

Sie können aus dem Beispiel sehen, dass mehrere Python-Funktionen/Typen ein iterable als Argument nehmen und die Folge von Werten verwenden, die es bei der Herstellung ein Ergebnisses erzeugt.

+0

Ich finde, wir können [definieren '__getitem__' Methode, um die Klasse iterierbar zu machen] (http://stackoverflow.com/questions/926574/why-does-defining-getitem-on-a-class-make-it-iterable- In-Python) auch. – acgtyrant

+0

Ich habe Anfang dieses Jahres die Iterationsprotokolle in [einem Gespräch mit PyData London] (https://github.com/steveholden/iteration) erklärt. Es könnte helfen - es gibt [auch ein Video der Sitzung] (https://www.youtube.com/watch?v=iTwrF1DofCY). – holdenweb

Verwandte Themen