在我将数据传递给构造函数之前(在预处理繁琐的情况下)创建一个单独的方法(我预先处理数据)是不错的样式,如下所示:
class C():
def __init__(self, input, more_input):
self.value = self.prepare_value(input, more_input)
def prepare_value(self, input, more_input):
#here I actually do some nontrivial stuff, over many lines
#for brevity I'm illustrating just a short, one-line operation
value = (input + more_input)/2
return value
print(C(10, 33).value) # has value 21.5
如果你想这样做,那么我建议两件事。
prepare_value()
装饰器进行装饰,使static method方法成为@staticmethod
。由于它没有对类本身的实例进行任何更改,只返回一个值,那么你不应该将它作为实例的方法。因此,@staticmethod
。_prepare_value()
。这实际上并没有使它成为私有的,但是对于其他开发人员(即未来的你)说这是一个公认的惯例“这种方法不是为了在外部使用”。总的来说,我的建议是:
class C():
def __init__(self, input, more_input):
self.value = self._prepare_value(input, more_input)
@staticmethod
def _prepare_value(input, more_input):
value = (input + more_input)/2
return value