更改类实例的返回值

时间:2018-06-14 09:32:06

标签: python-3.x

如何用一个属性覆盖一个类?

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

1 个答案:

答案 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并使用列表完成所有操作。