2011-01-28 21 views
6
# Python 3 
class Point(tuple): 
    def __init__(self, x, y): 
     super().__init__((x, y)) 

Point(2, 3) 

sorun sınıflara yerleşik type

TypeError: tuple() takes at most 1 argument (2 given)

Neden

neden olacaktır? Bunun yerine ne yapmalıyım?

+2

olası yinelenen (http://stackoverflow.com/questions/1565374/subclassing-python-tuple-with-multiple-init-arguments) –

cevap

10

tuple değişmez bir türüdür. __init__'dan önce zaten oluşturulmuş ve değişmez. Bu yüzden işe yaramıyor.

Gerçekten bir parçayı alt sınıflara ayırmak istiyorsanız, __new__ kullanın.

>>> class MyTuple(tuple): 
...  def __new__(typ, itr): 
...    seq = [int(x) for x in itr] 
...    return tuple.__new__(typ, seq) 
... 
>>> t = MyTuple((1, 2, 3)) 
>>> t 
(1, 2, 3) 
[Birden __init__ argümanlarla Subclassing Python tuple] arasında
+1

Ah, bu yüzden benim 'Point (2,3) '' Point'de '__new__' yöntemini arar, onu bulmayı başaramaz,' tuple .__ new __ (Point, 2,3) 'çağırır. Kullanıcı tanımlı bir sınıf gibi '__init__' için argümanlar,' tuple 'düzgün bir şekilde başlatmak için tek bir yineleyici gerektirir? Kod 'Point .__ init __ (self, 2, 3)' çağrısına bile ulaşmaz; Bu çağrı, eğer gerçekleşirse, tuple '__init__' içermediğinden ve 'object .__ init__' sadece sessizce hiçbir şey yapamayacağı için yanlış olur. – max

+0

Evet, tam olarak. Nesne zaten oluşturuldu. – user225312

İlgili konular