我正在尝试创建一个管道,以使用Class
而非functions
处理Python中的某些数据。到目前为止,我的课程有5个方法(函数),每个方法都进一步处理了数据。现在,我真正想要的是初始化Class
并使用一种do_all()
方法来贯穿整个管道。
为此,我需要使用在method A
中设置的变量来作为method B
的输入。用一些虚拟数据进行说明:
Class foo():
# class variables:
self.path = '\foo'
def __init__(self, age):
self.age = age
def methodA(meters):
self.centimeters = meter/100
return self.centimeters
def methodB(centimeters=None):
centimeters = self.centimeters if centimeters is None else centimeters
self.millimeters = centimeters/100
return self.millimeters
如果我实例化methodA
然后运行methodB
,一切都会好起来的,因为运行self.centimeters
时{'1}}是“创建的”。
methodA
但是,如果我想从头开始运行dummy = foo()
cm = dummy.methodA(5)
mm = dummy.methodB()
,它将返回错误。
methodB
现在,我了解到我需要先运行dummy = foo()
mm = dummy.methodB()
AttributeError: 'foo' object has no attribute 'centimeters'
,因此methodA
存在于类中。但是我想知道是否还有另一种方法。
我想要的是:self.centimeters
> input data
> several processes (methodA + methodB)
。我还希望能够分别运行每个进程output data
或methodA
。
我有什么解决方案?我应该只在最终方法methodB
中运行所有方法吗?在功能范例中,我将创建几个功能do_all()
,functionA
等,并在functionB
中仅包含functionA
,这也是进入functionB
的方式?
答案 0 :(得分:0)
方法B中的某些奇怪逻辑:如果您将非零值传递给厘米,则方法将忽略它并使用现有的self.centimeters(在调用methodB时不存在),如果您传递None,则使用passed值(即无)。也许方法的第一行应该是这样的?
centimeters = centimeters if centimeters else self.centimeters
或者您可以直接在 init
中启动self.centimeters