为了账号安全,请及时绑定邮箱和手机立即绑定

python - 跨方法和类传递变量

python - 跨方法和类传递变量

小唯快跑啊 2021-06-14 17:01:18
我有一些代码通常类似于以下内容:class ABC(Parent):    def func1(self, **kwargs)        start_time = time.time()        ...        ...    return stuffclass 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。
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

有几种方法可以做到。这是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


查看完整回答
反对 回复 2021-06-16
?
12345678_0001

TA贡献1802条经验 获得超5个赞

用一种不会乱七八糟的方法来解决你的问题是很困难的。本质上,您需要在两个函数之外使用一个变量。我认为你最好的选择是使用 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

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


查看完整回答
反对 回复 2021-06-16
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

您可以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


查看完整回答
反对 回复 2021-06-16
  • 3 回答
  • 0 关注
  • 294 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信