python - 跨方法和类传递变量

问题描述 投票:-1回答:3

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

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的论点。

谢谢你的帮助。

python function class methods
3个回答
-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
投票

有几种方法可以做到这一点。这里有一个通过使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
投票

你可以在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
© www.soinside.com 2019 - 2024. All rights reserved.