从Python中的buitin类继承

时间:2019-02-27 03:50:46

标签: python inheritance built-in

即使代码中的第三行被注释了,约翰尼又如何获得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

1 个答案:

答案 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']