开发一个类方法

时间:2013-06-05 20:58:35

标签: python

关于开发课程这个问题,我遇到了麻烦。这是问题所在: 开发一个类myList,它是内置列表类的子类。 myList和list之间唯一不同的是sort方法被覆盖。myList容器应该像常规列表一样,除了在这种情况下:

   >>>x = myList([1, 2, 3, ])
   >>>x
   [1,2,3]
   >>>x.reverse()
   >>>x
   >>>[3,2,1]
   >>> x[2]
   1
   >>>x.sort()
   You wish...

我熟悉课程的基础知识,但由于这是一个在线课程,我很难想到很多这些东西,有些看起来很基本但是第一次在Python上的人,很漂亮困难的。

2 个答案:

答案 0 :(得分:2)

要开发子类,您只需执行此操作:

class myList(list):
    pass

要覆盖方法,就是这样:

class myList(list):
    def sort(self):
        pass

要覆盖方法并使其行为与基类完全相同,除非在某种情况下,请执行以下操作:

class myList(list)
    def sort(self):
        if whatever_the_condition_is:
            print('You wish...')
        else:
            super().sort()

所以,现在你只需要为whatever_the_condition_is添加正确的表达式。

你没有在你的问题中解释,但我猜测条件是“列出的是完全向后排序”。所以,这将是作业的有趣部分。尝试编写从is_sorted_backward中获取self值的代码,如果遇到问题,请求帮助。

答案 1 :(得分:-2)

可以继承内置类并覆盖某些方法。 但是,支持现有功能非常重要(如果您不从头开始重新实现它)。

可以用两种方式运行父方法

使用super()功能

class MyList(list):
    def sort(self):
        print ("I am goung to sort this heap of data...")
        res = super(MyList, self).sort()
        print ("I have done this!!!")
        return res    # I think it is good practice to return parent result 
                      # (if You don't plan to return Your own result) 

运行parent的未绑定方法并将self作为第一个参数(您应该明白这正是您所需要的,否则使用super

class MyList(list):
    def sort(self):
        print ("I am goung to sort this heap of data...")
        res = list.sort(self)
        print ("I have done this!!!")
        return res    # I think it is good practice to return parent result 
                      # (if You don't plan to return Your own result) 

我的示例使用python 2.x for python 3.x super语法将有所不同,但主要思想保持不变。