# Python 3
class Point(tuple):
def __init__(self, x, y):
super().__init__((x, y))
Point(2, 3)
TypeError: tuple() takes at most 1 argument (2 given)
Neden
neden olacaktır? Bunun yerine ne yapmalıyım?# Python 3
class Point(tuple):
def __init__(self, x, y):
super().__init__((x, y))
Point(2, 3)
TypeError: tuple() takes at most 1 argument (2 given)
Neden
neden olacaktır? Bunun yerine ne yapmalıyım?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
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
Evet, tam olarak. Nesne zaten oluşturuldu. – user225312
olası yinelenen (http://stackoverflow.com/questions/1565374/subclassing-python-tuple-with-multiple-init-arguments) –