首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问非继承类的变量

访问非继承类的变量
EN

Stack Overflow用户
提问于 2014-09-20 02:18:35
回答 1查看 46关注 0票数 0

我有一个运行所有测试的模块testrun.py。其中一个测试是SWStatus,这样就可以

代码语言:javascript
复制
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次。

代码语言:javascript
复制
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。但是因为我从HWStatus运行SWStatus,所以每次check都会被初始化为空列表。所以即使我在做check.append(status),我也只得到了一个值。我该如何解决这个问题呢?

我的第二个问题是,有没有什么方法可以从我的HWStatuswork方法访问check列表,即使HWStatus不是从SWStatus继承的

我可以这样做吗:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-09-20 04:02:19

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

但是,运行测试的方式(在单独的进程中)会创建不同的SWStatus.check副本。当您启动一个新进程时,您将创建一个单独的内存区来运行该进程。因此,在您的代码中创建了11个SWstatus.check变量副本,并且看不到其他副本。

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

代码语言:javascript
复制
import sys

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

    sys.exit(not t.work())

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25940092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档