2010-02-10 11 views
12

Chcę podklasy typu list i mają krojenie zwrotu obiekt typu potomka, jednak zwraca list. Jaki jest minimalny sposób na wykonanie kodu?Podklasa wbudowana Lista

Jeśli nie ma na to sposobu, po prostu dołączę wewnętrznie listę, która jest trochę bardziej nieporządna, ale nie nieuzasadniona.

Mój kod do tej pory:

class Channel(list): 
    sample_rate = 0 
    def __init__(self, sample_rate, label=u"", data=[]): 
     list.__init__(self,data) 
     self.sample_rate = sample_rate 
     self.label = label 

    @property 
    def nyquist_rate(self): 
     return float(self.sample_rate)/2.0 

Odpowiedz

10

Chyba należy zastąpić metodę __getslice__ powrotu przedmiot typu ...

Może coś jak poniżej?

class MyList(list): 
    #your stuff here 

    def __getslice__(self, i, j): 
     return MyList(list.__getslice__(self, i, j)) 
+0

Czy można użyć seattr do tego? Naiwne 'setattr (self, '__getslice__', lambda * a, ** k: whatever()' zawiedzie) - patrz http://stackoverflow.com/q/29858405/281545 –

Powiązane problemy