Travis-ci:“ X”对象没有属性“ Y”

时间:2019-01-02 10:50:26

标签: python testing

问题出在错字,感谢所有尝试提供帮助的人

我正在尝试在travis-ci中运行单元测试。有一次我有一个简化的类,如下所示:

class X:

    def __init__(self, var1):
        self.var1 = var1

    def Y(self):
        return True

    def Z(self):
        return False

    def call_function(self, function):
        output = function(self.Y, self.Z, self.var1)

然后我打电话给X.call_function,这在过去运行程序时没有任何问题。但是,当在travis-ci中运行此程序时,系统会告诉我:

  

“ X”对象没有属性“ Y”

奇怪的是,self.Z似乎没有问题。

有人知道这是什么原因以及如何解决?

更新: 为了清楚起见,function参数类似于:

def function(func1, func2, var1):
    if type(var1) == int:
        func1()
    else:
        func2()

然后主文件将类似于:

x = X(3)
x.call_function(function)

2 个答案:

答案 0 :(得分:1)

您的self.Y参数返回函数本身,而不是返回的值。 如果您将self.Y设置为True,则call_function函数将起作用。 要运行该功能,可以在功能名称后加上方括号。

编辑:看起来您已经忘记了添加自我。不用担心,这是工作代码。 (当您创建类的实例时,会自动调用self参数。有关self的更多信息,check this out

编辑2:我已经对其进行了更改,因此它返回了该函数。只需self参数即可。

这是您的固定代码:

class X:

    def __init__(self, var1):
        self.var1 = var1

    def Y(self):
        return True

    def call_function(self, function):
        output = function(self.Y, self.var1)

答案 1 :(得分:1)

如果不是@ static,class或抽象方法,则必须在类中添加带有self的函数

class X:

    def __init__(self,var1):
        self.var1 = var1

    def Y(self):
        return True

    def call_function(self, function):
        output = function(self.Y(), self.var1)