繁体   English   中英

Python:如何使类继承自list,可以访问第一个元素?

[英]Python: how make class, inherited from list, with access to first element?

在Python中,我想创建类MyList并从列表继承。 此外我想首先制作属性,这等于列表的第一个元素。 例如,对于这样的代码

l = MyList([0, 1, 2])
print (l.first)
l.first = 3
print (l)

我想看看

0
[3, 1, 2]

我写

class MyList(list):
    def __init__(self, input_list):
        self.first = input_list[0]

my_list = MyList([0, 1, 2])
print (my_list)
print (my_list.first)

得到

[]
0

为什么my_list是空的?

你没有在__init__中调用list的__init__

class MyList(list):
    def __init__(self, input_list):
        super(MyList, self).__init__(input_list)
        self.first = input_list[0]

此外,您应该使用属性,以便在初始化后更改列表的值时返回第一个值,而不是首先影响init。

class MyList(list):
    def __init__(self, input_list):
        super(MyList, self).__init__(input_list)

    @property
    def first(self):
        # TODO: catch empty list exception
        return self[0]

在这种情况下,你甚至不必覆盖自我,所以它简化为

class MyList(list):

    @property
    def first(self):
        # TODO: catch empty list exception
        return self[0]

first将其定义为property而不是简单属性。

class MyList(list):
    @property
    def first(self):
        return self[0]

    @first.setter
    def first(self, val):
        self[0] = val

演示:

>>> lst = MyList([0, 1, 2])
>>> lst.first
0
>>> lst
[0, 1, 2]
>>> lst.first = 100
>>> lst
[100, 1, 2]

你需要添加一个对super类的调用,并且first按预期工作我会推荐一个property

class MyList(list):
    def __init__(self, input_list):
        super(MyList, self).__init__(input_list)
        self.first = input_list[0]

    @property
    def first(self):
        return self[0]

    @first.setter
    def first(self, value):
        self[0] = value

现在打电话:

my_list = MyList([0, 1, 2])
print (my_list)
print (my_list.first)
my_list.first = 12
print (my_list)
print (my_list.first)

得到:

[0, 1, 2]
0
[12, 1, 2]
12

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM