访问非继承类的变量

时间:2014-09-19 18:18:35

标签: python class inheritance subprocess

我有一个运行所有测试的模块testrun.py。其中一项测试是SWStatus,以便

class HWStatus(myTest):
    check = []
    def __init__(self):
        super(SWStatus, self).__init__()

    def setup(self):
        return

    def work(self):
        """
        some functionality to calculate the value of i
        i is either 10 or 20
        """
        if i == 10:
            status = True
        else:
            status = False
        check.append(status)

要运行此测试,我会执行python testrun.py SWStatus,它会给我结果。

我已经创建了HWStatus测试,以便它会运行SWStatus次测试10次。

class HWStatus(myTest):
    def __init__(self):
        super(SWStatus, self).__init__()

    def setup(self):
        return

    def work(self):
        for i in xrange(10):
            args = ['python', 'testrun.py', 'SWStatus']
            p = subprocess.Popen(args)
            while p.poll() != 0:
                time.sleep(amount_of_time)

当我执行testrun.py HWStatus时,它会运行SWStatus 10次。

我在这里面临两个问题。 我希望得到10个值的check列表。这样每次它都会附加TrueFalse,具体取决于逻辑。但是因为我从SWStatus开始运行HWStatus,所以check每次都会被初始化为空列表。所以即使我正在做check.append(status),我只得到一个值。我应该如何解决这个问题?

我的第二个问题是,即使check未从work继承,我仍然可以通过HWStatus HWStatus方法访问SWStatus列表1}}?

我可以这样做:

class HWStatus(myTest):
    def __init__(self):
        super(SWStatus, self).__init__()

    def setup(self):
        return

    def work(self):
        for i in xrange(10):
            args = ['python', 'testrun.py', 'SWStatus']
            p = subprocess.Popen(args)
            while p.poll() != 0:
                time.sleep(amount_of_time)
        print "List of 10",check

1 个答案:

答案 0 :(得分:0)

继承不会影响python中的成员可见性;只要它们在词法范围内,python中的所有变量都是可见的。

您运行测试的方式(在单独的进程中)会创建SWStatus.check的不同副本。当您启动一个新进程时,您将创建一个运行它的单独内存区域。因此,在您的代码中创建了11个SWstatus.check变量副本,没有人可以看到任何其他内容。

我怀疑你想要做的是并行运行测试,在这种情况下,最好让测试将其状态作为退出状态返回......

import sys

if __name__ == 'main':
    t = SWStatus()

    sys.exit(not t.work())

但是,如果绝对需要在同一地址空间中运行所有测试,则可以使用线程而不是进程。但是,您需要使用类似Queue的内容来协调对内存的并发访问。