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
在同一行中调用它的方法?
这不是成语,您在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)