我有一些代码,通常类似于以下内容:
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
需要在这里和其他地方完全定义,我不能改变我对func1
或func2
的论点。
谢谢你的帮助。
在一个不会混乱的方法中解决问题很困难。基本上,您需要在两个函数之外使用变量。我认为你最好的选择是使用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
可以避免在函数之外定义变量。
有几种方法可以做到这一点。这里有一个通过使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
你可以在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