![](/img/trans.png)
[英]python: inherited from builtin type list, how to access elements within new class?
[英]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.