在初始化器中使用对象方法(同一行)

Pyt*_*ese 5 python initialization object python-2.7

我正在清理python对象类,主要关注如何创建对象。该__init__方法创建一个空字典,几乎需要立即填充它。但这不应该在中发生__init__,因为使用的方法会有很大差异。这是一个例子:

class Storage:

    def __init__(self):
        self.data = {}

    def fill_1(self):
        self.data['solo'] = 'all alone'

    def fill_2(self, buddy, bff):
        self.data['buddy'] = buddy
        self.data['bff'] = bff

    def fill_3(self, that_guy, house):
        self.data[that_guy] = house
Run Code Online (Sandbox Code Playgroud)

通常,我可以这样一个接一个地打电话:

box = Storage.Storage()
box.fill_1()
Run Code Online (Sandbox Code Playgroud)

但是,当我顺序创建许多这些对象时,这可能会令人不知所措。我的目标是将__init__方法与fill同一行中的一种方法一起使用。我尝试使用以下电话:

box = Storage.Storage().fill_1()
Run Code Online (Sandbox Code Playgroud)

但这不会创建对象,而是返回None。所以我有两个问题:

我的代码是否由于行正在调用实例方法而返回None对象?

以及如何创建Storage对象,然后fill在同一行中调用它的方法?

Bre*_*bel 5

这不是成语,您在python中经常会看到这种用法(尽管它在许多其他语言中非常普遍,尤其是javascript),但是您可以通过self从mutator函数返回来做到这一点。(似乎您也缺少self实例方法的参数)。这意味着您还可以链接mutator调用-Storage().fill_1().fill_2()

class Storage(object):

    def __init__(self):
        super(Storage, self).__init__()
        data = {}

    def fill_1(self):
        data['solo'] = 'all alone'
        return self

    def fill_2(self, buddy, bff):
        data['buddy'] = buddy
        data['bff'] = bff
        return self

    def fill_3(self, that_guy, house):
        data[that_guy] = house
        return self

box = Storage().fill_1()
Run Code Online (Sandbox Code Playgroud)