首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最小二乘法行为

最小二乘法行为
EN

Stack Overflow用户
提问于 2015-03-08 03:41:01
回答 1查看 435关注 0票数 2

我正在尝试编写一个包含生成器的测试类,并使用nosetests运行测试。但是,我对nosetests测试运行程序似乎将测试类中的方法隔离开来,从而使它们不共享相同的self的方式感到困惑。

代码语言:javascript
复制
class Test(object):

    def check(self):
        print self.one

    def test(self):
        self.one = 1
        yield self.check

这给了我以下错误:

代码语言:javascript
复制
AttributeError: 'Test' object has no attribute 'one'

我猜这和鼻子隔离测试是有关系的。除了显式地将所有必需的变量传递给方法,而不是隐式地作为self上的属性传递之外,还有其他的解决办法吗?

为了明确起见,我知道如何在“标准”Python中分配属性。这不是我要问的。我想知道的是,如何在使用nosetests命令运行的nosetests测试中实现所需的行为。

根据坦维尔氏的建议,我可以添加一个__init__方法来初始化属性。这是一个解决方案,但它确实回答了我的问题,正如我最初提出的。

但是,我最终想要做的是在self语句上循环,修改self上属性的值,并在check方法中的self值中设置修改寄存器。添加一个__init__不允许我这样做。

代码语言:javascript
复制
class Test(object):

    def __init__(self):
        self.one = None

    def check(self):
        print self.one

    def test(self):
        self.one = 1
        yield self.check

我得到:

代码语言:javascript
复制
$ nosetests nosetest-with-classes.py --nocapture
None
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

似乎仍然有某种类型的方法级隔离由nosetest运行程序强制执行。所以我想深入了解一下到底发生了什么。是否有一种以正常方式共享self变量属性的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-09 07:37:18

简单地说,答案是否定的,您不能使用类的实例变量传递状态。当命中类方法的输出时,鼻子将始终确定该方法属于哪个类,并将创建这个类的一个新实例,该实例将不具有您倾向于在当前测试生成类实例上设置的属性(请参见鼻子纹实际上可以做到这一点)。一种解决方案可能是使用类变量传递所需的信息,如下所示:

代码语言:javascript
复制
class Test(object):
    def check(self):
        print self.one # here it really refers to Test.one

    def test(self):
        Test.one = 1
        yield self.check

但是我建议研究一下鼻参数化插件,它做了一些你试图在这里实现的魔术。

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

https://stackoverflow.com/questions/28922816

复制
相关文章

相似问题

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