我有一些代码大致类似于以下代码:
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
的参数。
感谢您的协助。
答案 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