-2

我在这个关于开发课程的问题上遇到了麻烦。问题是:开发一个类 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 的人来说,这是相当困难的。

4

2 回答 2

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()

所以,现在你只需要在 for 中输入正确的表达式whatever_the_condition_is

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

于 2013-06-05T21:02:28.320 回答
-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 的 unbound 方法并将 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,因为 python 3.xsuper语法会有所不同,但主要思想保持不变。

于 2013-06-05T21:13:49.390 回答