2016-06-05 14 views
9

biz sınıfta __str__ yöntemi tanımlarsanız:Özel sınıf nesnesi Python'da bir tuple nasıl dönüştürülür?

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


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

yüzden hemen str onun nesneyi dönüştürebilirsiniz:

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

Ama bildiğim kadarıyla böyle __tuple__ sihirli yöntem yoktur, Bu yüzden, tuple()'a geçebilecek bir sınıfı nasıl tanımlayacağımı bilmiyorum, böylece nesneyi hemen tuple'a dönüştürebilelim.

+4

Bize yardım edebilmek için bir tuple dönüştürmek istediğiniz bir şeyin örnek kodunu verin. Ayrıca şunu da kontrol edin: http://stackoverflow.com/questions/12836128/python-convert-list-to-tuple -> Listelere özgüdür, ancak size yardımcı olabilir. –

cevap

13

tuple "işlevi" (gerçekten bir türüdür, ancak bir işlev gibi çağırabileceğiniz anlamına gelir) bağımsız değişken olarak yineleyici de dahil olmak üzere yinelenebilir. Yani, nesneyi bir tuple dönüştürmek istiyorsanız, yinelenebilir olduğundan emin olun. Bu, bir yineleyici döndürmesi gereken __iter__ yönteminin uygulanması anlamına gelir. Örneğin.

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

Birkaç Python işlevleri/tipleri kendi bağımsız değişken olarak bir iterable alıp bir sonuca üretiminde oluşturduğu değerlerin dizisini kullanacağı örnekten görebiliriz.

+0

[Sınıf yinelenebilir hale getirmek için __getitem__' yöntemini tanımlayabiliriz] (http://stackoverflow.com/questions/926574/why-does-defining-getitem-on-a-class-make-it-iterable- python da). – acgtyrant

+0

Bu yılın başlarında [PyData London ile bir konuşma] (https://github.com/steveholden/iteration) adresindeki yineleme protokollerini açıkladım. Bu yardımcı olabilir - [Ayrıca oturumun bir video] (https://www.youtube.com/watch?v=iTwrF1DofCY). – holdenweb