当前位置: 首页 > 面试题库 >

Python:如何从内置列表类型继承?

吕峰
2023-03-14
问题内容

我想向内置list类型添加一些属性,所以我这样写:

class MyList(list):
    def __new__(cls, *args, **kwargs):
        obj = super(MyList, cls).__new__(cls, *args, **kwargs)
        obj.append('FirstMen')
        return obj

    def __init__(self, *args, **kwargs):
        self.name = 'Westeros'

    def king(self):
        print 'IronThrone'

if __name__ == '__main__':
    my_list = MyList([1, 2, 3, 4])
    print my_list

my_list仅包含元素'FirstMen'。为什么我__new__在这里不工作?我应该如何从类似内置类型的继承list?像这样的不可变类型是否相同str


问题答案:

list类型通常在其__init__()方法内进行列表的实际初始化,因为这是可变类型的约定。__new__()子类型化不可变类型时,只需要覆盖即可。虽然
可以__new__()在对列表进行子分类时覆盖,但对于您的用例而言,这样做没有多大意义。覆盖比较容易__init__()

class MyList(list):
    def __init__(self, *args):
        list.__init__(self, *args)
        self.append('FirstMen')
        self.name = 'Westeros'

另请注意,super()在这种情况下,建议不要使用。您想在list.__init__()这里打电话,别无其他。



 类似资料:
  • 问题内容: 我正在使用Flask,并且从get请求返回一个XML文件。如何将内容类型设置为xml? 例如 问题答案: 尝试这样: 实际的Content-Type基于mimetype参数和字符集(默认为UTF-8)。

  • 问题内容: 我想在Python中实现自定义列表类作为的子类。为了获得所有列表操作的完全类型兼容性,我需要从基类中重写的最少方法集是什么? 这个问题表明至少需要重写。从进一步的研究,也和是必需的。所以我有这段代码: 下列语句即使没有覆盖方法也可以按需工作: 这些语句仅与上述类定义中的覆盖方法一起使用: 我唯一不知道如何实现的是使扩展切片返回正确的类型: 我需要在类定义中添加些什么才能获得类型? 另外

  • 我正在使用Flask,并从get请求返回一个XML文件。如何将内容类型设置为xml? 例如。

  • 问题内容: 我想继承该类型,并让切片返回后代类型的对象,但是它返回一个。最少的编码方式是什么? 如果没有一种整洁的方法,我将在内部添加一个列表,该列表稍显混乱,但并非不合理。 到目前为止,我的代码: 问题答案: 我想你应该重写该方法以返回您类型的对象… 也许像下面这样?

  • 问题内容: 我有及其继承的类。如何从课程中获取属性? 举例来说,让这些和对象: 我想做一些事情,例如: 并得到。我怎样才能做到这一点? 问题答案: 你不能。 实例仅继承父类的方法和属性,而不继承 实例 属性。您不应混淆两者。 是 实例的实例 属性。本实例将有他们 自己 的副本属性。 通常,您将对构造函数进行编码以采用两个参数: 另一种方法是保留对实例的引用: 从那里不再继承。像这样使用它:

  • 问题内容: 我有一个数据框,其中包含有关电影的信息。它有一个名为的列,其中包含它所属的流派列表。例如: 我想知道如何查询数据框,以便它返回属于某个类型的电影? 例如,可能会返回0或1。 我知道列表,可以做以下事情: 但是,在大熊猫中,我找不到类似的东西,我唯一知道的是,但它不适用于列表类型。 问题答案: 您可以使用create ,然后: