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

标签 python list inheritance new-operator

我想给内置的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__(),而不是其他任何东西。

关于Python:如何从内置列表类型继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9432719/

相关文章:

python - 我的 Scrapy CrawlSpider 在初始启动 URL 后停止

CSS - 元素符号和列表之间的空间而不填充列表

python - 理解 Python super() 和 __init__() 方法

java - 继承的方法不起作用

python - matplotlib 的线性回归线给出 ValueError

python - 尝试在 AWS Data Pipeline 上构建自动化脚本

c - 按值填充值 a char *

python - 从 Python 2D 列表中删除列的最佳/快速方法

c++ - 继承和重载默认构造函数

python - 无法将长 JSON 输出写入文本文件