python-在方法和类之间传递变量

时间:2018-09-12 20:45:42

标签: python function class methods

我有一些代码大致类似于以下代码:

class ABC(Parent):
    def func1(self, **kwargs)
        start_time = time.time()
        ...
        ...
    return stuff

class XYZ(Parent):
    def func2(self, **kwargs)
        ...
        ...
        a = time.time() - start_time           
    return other_stuff

我正在寻找使用XYZ类中start_time内的ABC类func1中定义的变量func2的绝对最简单的方法。

注意:此代码非常通用,我正在使用的实际代码要复杂得多。我发现的其他答案提到了在任一类之外定义start_time并将其传递给其他答案,或者它们涉及更改参数。我不能做到这一点。我的start_time需要在这里和其他地方完全定义,并且我无法更改func1func2的参数。

感谢您的协助。

3 个答案:

答案 0 :(得分:-1)

以一种不会变得凌乱的方法来解决您的问题很困难。本质上,您将需要在两个函数之外都使用一个变量。我认为您最好的选择是使用python的global关键字:

class ABC(Parent):
    def func1(self, **kwargs):
        global start_time
        start_time = time.time()

        return stuff

class XYZ(Parent):
    def func2(self, **kwargs):
        global start_time
        a = time.time() - start_time

        return other_stuff

此处使用global可以避免在函数之外定义变量。

答案 1 :(得分:-1)

有几种方法可以做到这一点。这是通过使global成为start_time的实例变量/属性并在ABC中实例化ABC来避免XYZ的一种方法。我认为这也是用户@Daniel在评论“您必须将ABC实例传递到XYZ实例”中暗示的内容。

import time


class Parent:
    pass


class ABC(Parent):
    def __init__(self):
        self.start_time = None

    def func1(self):
        self.start_time = time.time()


class XYZ(Parent):
    def __init__(self):
        self.abc = ABC()

    def func2(self):
        self.abc.func1()
        return time.time() - self.abc.start_time           


xyz = XYZ()
print(xyz.func2())

Python3.5输出:

>>> xyz = XYZ()
>>> print(xyz.func2())
9.5367431640625e-07

答案 2 :(得分:-2)

您可以在start_time中将Parent设为类属性。

class Parent(object):
    def __init__(self):
        self.start_time = None

class ABC(Parent):
    def func1(self, **kwargs)
        self.start_time = time.time()
        ...
        ...
    return stuff

class XYZ(Parent):
    def func2(self, **kwargs)
        ...
        ...
        a = time.time() - self.start_time           
    return other_stuff
相关问题