如何覆盖python列表中的init方法?

时间:2016-11-01 02:48:47

标签: python python-2.7

我需要继承list类并覆盖 init ()方法来获取参数a,b。 a应该是我初始化列表的长度,b应该是列表中Items之间的步骤。我只是不知道从哪里开始覆盖init方法。

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)

但是我不熟悉python如何实现list类,例如我如何使用我刚刚传递的列表理解。

3 个答案:

答案 0 :(得分:0)

你应该用super来调用list方法,在这种情况下它看起来像这样:

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

答案 1 :(得分: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的类来获取列表并对其进行处理。

答案 2 :(得分: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)