如何使用未调用的实例方法中设置的变量?

时间:2019-07-18 08:00:22

标签: python class variables methods instance

我正在尝试创建一个管道,以使用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 datamethodA

我有什么解决方案?我应该只在最终方法methodB中运行所有方法吗?在功能范例中,我将创建几个功能do_all()functionA等,并在functionB中仅包含functionA,这也是进入functionB的方式?

1 个答案:

答案 0 :(得分:0)

方法B中的某些奇怪逻辑:如果您将非零值传递给厘米,则方法将忽略它并使用现有的self.centimeters(在调用methodB时不存在),如果您传递None,则使用passed值(即无)。也许方法的第一行应该是这样的?

centimeters = centimeters if centimeters else self.centimeters

或者您可以直接在 init

中启动self.centimeters