python - 跨方法和类传递变量

我有一些代码通常类似于以下内容:


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内的类 ABC 中start_time定义的变量。func1func2


注意:此代码非常通用,我正在使用的实际代码要复杂得多。我发现的其他答案提到start_time在任一类之外定义然后将它们传入,或者它们涉及更改参数。我不能做到这一点。我start_time需要在这里而不是其他地方准确定义,而且我无法更改我对func1或 的论点func2。


小唯快跑啊
浏览 310回答 3
3回答

海绵宝宝撒

有几种方法可以做到。这是global通过创建start_time实例变量/属性ABC并ABC在XYZ. 我认为这也是用户@Daniel 在评论“您必须将 ABC 的实例传递给 XYZ 的实例”中暗示的内容。import timeclass Parent:    passclass 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

12345678_0001

用一种不会乱七八糟的方法来解决你的问题是很困难的。本质上,您需要在两个函数之外使用一个变量。我认为你最好的选择是使用 python 的global关键字:class ABC(Parent):    def func1(self, **kwargs):        global start_time        start_time = time.time()        return stuffclass XYZ(Parent):    def func2(self, **kwargs):        global start_time        a = time.time() - start_time        return other_stuff使用globalhere 可以避免在函数之外定义变量。

至尊宝的传说

您可以start_time在Parent.class Parent(object):    def __init__(self):        self.start_time = Noneclass ABC(Parent):    def func1(self, **kwargs)        self.start_time = time.time()        ...        ...    return stuffclass XYZ(Parent):    def func2(self, **kwargs)        ...        ...        a = time.time() - self.start_time               return other_stuff
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python