2016-11-01 2 views
0

Мне нужно наследовать класс списка и переопределить метод init() для определения параметров a, b. a должна быть длина списка I, а b - шаг между элементами в списке. Я просто не знаю, с чего начать с переопределения метода init.Как переопределить метод init в списке python?

def myclass(list): 
    def __init__(a,b,*args, **kwargs): 
     pass 

Я понятия не имею, что делать после этого.

Я видел, что я могу сделать это:

class MyClass(list): 
    def __init__(a,b): 
     data =[x for x in range(0,a*b,b)] 
     list.__init__(self,data) 

Но я не знаком с тем, как питон реализует класс списка, например, как я могу получить, чтобы использовать список понимание я только что прошел.

+0

Отредактировал вопрос, и я был бы признателен, если бы вы погрузились в частичные характеристики того, как класс списка реализован в pyhon. – ArdentLearner

+0

Это домашнее задание или вы пытаетесь решить конкретную проблему? Причина, по которой я спрашиваю, в Python, мы обычно не «предварительно инициализируем» списки. –

+0

@donkopotamus: Вы только переопределяете '__new__' для неизменяемых типов; для 'list',' __init__' в порядке. – ShadowRanger

ответ

0

Спасибо всем, кто ответил. Понял, что я мог бы достичь того, чего я хотел достичь таким образом:

class myclass(list): 
    def __init__(self,a,b): 
     data =[x for x in range(0,a*b,b)] 
     self.length = len(data) 
     super(myclass, self).__init__() 
     self.extend(data) 
0

Вы должны использовать супер для вызова методов списка, в данном случае это будет выглядеть примерно так:

class myclass(list): 
    def __init__(self, a, b, *args, **kwargs): 
     super(myclass, self).__init__() # this will call the list init 
     # do whatever you need with a and b 

l = myclass(10, 0) 
l.append(10) # this will calls list append, since it wasn't overriden. 
print l 
+0

Спасибо за отзыв, я был бы признателен, если вы проверили отредактированный вопрос. – ArdentLearner

+0

Я не думаю, что вы можете это сделать, потому что я считаю, что [] зарезервирован для списков. Существует несколько внутренних операторов, которые вы можете переопределить, например, метод доступа (например, l [1]), реализуя метод \ _ \ _ getitem \ _ \ _. Список .__ init __() - это стиль старого стиля, который я делал с супер в моем примере. –

0
#!/usr/bin/python 


class myclass: 

    # use the init to pass the arguments to self/the class 
    def __init__(self, list, num): 
     self.list = list 
     self.num = num 


    # use this to use the variables 
    def use_the_stuff(self): 
     #prints the item in the given place 
     # i.e in a list of ["A","B","C"] 
     # if self.num is 0, then A will be printed. 
     print self.list[self.num] 


list_abc = ["A", "B", "C"] 
myclass(list_abc, 2).use_the_stuff() 

В основном используется класс с INIT взять список и сделать вещи с ним ,

Смежные вопросы