2012-04-05 12 views
3

Warum funktioniert die folgenden Arbeiten:Warum funktioniert mein Python-Vererbung/Super-Beispiel nicht?

class CTest(tuple): 
    def __init__(self,arg): 
     if type(arg) is tuple: 
      super(CTest,self).__init__((2,2)) 
     else: 
      super(CTest,self).__init__(arg) 
a=CTest((1,1)) 
print a 

Der Ausgang ist (1,1), während ich erwarten zu sehen (2,2).

Warum bekomme ich auch eine Verwarnung dieses Objekt. init() nimmt keine Parameter? Was soll ich stattdessen tun?

+0

Was ist die Sprache? –

+0

@PetrAbdulin - Aus der Sicht, Python. – DMan

+0

Korrigiert, tut mir leid. Es ist Python. – user1308523

Antwort

5

Tupeln sind unveränderlich, Sie __new__ außer Kraft zu setzen haben:

class CTest(tuple): 
    def __new__(cls, arg): 
     if type(arg) is tuple: 
      return super(CTest, cls).__new__(cls, (2, 2)) 
     else: 
      return super(CTest, cls).__new__(cls, arg) 

Jetzt funktioniert das wie erwartet:

a = CTest((1,1)) 
print a 
> (2, 2) 

Werfen Sie einen Blick auf diese post für weitere Details.

Verwandte Themen