如何用一个属性覆盖一个类?
e.g。
class AListGenerator(list):
def __init__(self, *args):
self._mylist = [word for word in args if 'a' in word]
self = self._mylist # does nothing
>>> x = AListGenerator('mum', 'dad', 'mike', 'aaron')
>>> x
[]
>>> x._mylist
['dad', 'aaron']
如何让x
返回x._mylist
,以便无需调用_mylist
属性?
>>> x
['dad', 'aaron']
为了澄清,我不想/需要__repr__
,我希望能够做到这样的事情:
x.append('ryan')
和x
返回['dad', 'aaron', 'ryan']
,而不只是['ryan']
。
答案 0 :(得分:2)
您继承自list
,因此您的班级已经可以访问其所有方法,因此您已经可以x.append(stuff)
。
在使用__init__
方法执行任何操作之前,您应该(可能始终)启动基类:
class Stuff(list):
def __init__(self, *args):
# initiate the parent class!
super().__init__(word.lower() for word in args)
# you also can define your own attributes and methods
self.random_ID = 5 # chosen by fair dice roll, guaranteed to be random
x = Stuff("HELLO", "WoRlD")
然后你可以打印x
并使用列表完成所有操作。