即使代码中的第三行被注释了,约翰尼又如何获得list的功能,因为这是初始化?那么那行的意义是什么?
class Namedlist(list):
def __init__(self,name):
list.__init__([]) #This line even if commented does not affect the output
self.name=name
johny=Namedlist(john)
johny.append("artist")
print(johny.name)
print(johny)
>>john
>>artist
答案 0 :(得分:1)
代码list.__init__([])
中的行没有任何作用,因为如果您要修改实例化的对象,则需要调用super()
而不是内置的list
(或使用list.__init__(self, [])
,但对我来说似乎更令人困惑)。
例如,对super().__init__()
的调用可用于传递列表的初始数据。
我建议您将代码更改为此:
class NamedList(list):
def __init__(self, name, *args, **kwargs):
# pass any other arguments to the parent '__init__()'
super().__init__(*args, **kwargs)
self.name = name
要成为这样的用户:
>>> a = NamedList('Agnes', [2, 3, 4, 5])
>>> a.name
'Agnes'
>>> a
[2, 3, 4, 5]
>>> b = NamedList('Bob')
>>> b.name
'Bob'
>>> b
[]
>>> b.append('no')
>>> b.append('name')
>>> b
['no', 'name']
任何可迭代项都可以用作初始数据,而不仅仅是列表:
>>> c = NamedList('Carl', 'Carl')
>>> c.name
'Carl'
>>> c
['C', 'a', 'r', 'l']