Python AttributeError:对象在Unittest中没有属性

Python AttributeError:对象在Unittest中没有属性,python,class,methods,python-unittest,Python,Class,Methods,Python Unittest,我有两个脚本,第一个是All_方法,另一个是All_测试用例,因为我使用的是unittest框架,所以我们开始 所有方法如下所示: class All_Services(): def abc(self): x =1 def bca(self): print "My Name is Taimoor" self.abc() def cba(self): self.bca() 在另一个脚本上,所有的测试用例都

我有两个脚本,第一个是All_方法,另一个是All_测试用例,因为我使用的是unittest框架,所以我们开始

所有方法如下所示:

class All_Services():
    def abc(self):
        x =1

    def bca(self):
        print "My Name is Taimoor"
        self.abc()

    def cba(self):
        self.bca()
在另一个脚本上,所有的测试用例都是这样的:

from All_Methods import All_Services as service

    class All_TestCases(unittest.TestCase):
        def test_1_running_method(self)
            service.cba(self)
例外情况如下:

AttributeError: 'All_TestCases' object has no attribute 'bca'
请有人告诉我,我在这里错过了什么?
谢谢。

当您将self传递给调用该类的方法时,您没有以通常的方式使用类。常见的方法是在类的实例上调用方法并隐式地获取自参数

调用
方法时。运行\u query\u Athena(self)
self是
All\u测试用例的一个实例,它没有连接\u Athena的
方法

你的意思是让
All\u测试用例
派生自
All\u方法

为什么
所有方法都是类

  • 使用适当的缩进,因为python完全基于代码缩进的方式
  • 请,请使用适当的命名约定;根据本协议的建议
  • 您试图在没有实例的情况下访问实例方法
  • 请尝试以下操作:

    class MyClass:
        def my_instance_method(self):
            return True
    
        @classmethod
        def my_class_method(cls):
            return True
    
        @staticmethod
        def my_static_method():
            return True
    
    这行不通:

    >> MyClass.my_instance_method()
    TypeError: my_instance_method() missing 1 required positional argument: 'self'
    
    但是,由于它们没有绑定到正在创建的类实例,因此它们将被删除

    MyClass.my_class_method()
    MyClass.my_static_method()
    
    实例方法需要实例化该类;意思是你使用:

    MyClass().my_instance_method()
    
    因为您似乎想要在类实例上设置
    response\u id
    ;使用表示类实例的
    self
    参数来获取
    响应\u id
    -我建议您使用一个实例方法并如上所示实例化该类(注意类名称后面的
    ()


    请务必修复问题中的格式。

    示例中的代码有很多错误,但请将其放在一边

    该错误是由于将
    class A
    的实例作为
    self
    参数传递给
    class B
    的(非静态)方法而导致的。 Python将尝试在
    类A
    的实例上调用此方法,从而导致缺少属性错误

    以下是问题的简化示例:

    class A:
        def is_ham(self):
            # Python secretly does `self.is_ham()` here, 
            # because `self` is the current instance of Class A. 
            # Unless you explicitly pass `self` when calling the method.
            return True
    
    
    class B:
        def is_it_ham(self):
            # Note, `self` is an instance of class B here.
            return A.is_ham(self)
    
    
    spam = B()
    spam.is_it_ham()
    

    你似乎有可变的缩进宽度,你应该解决这个问题。你应该尝试做一个最小的例子,在那里你可以显示使用相同的问题。您不需要unittest,也不需要方法中的任何代码来触发此问题。事实上,这是我们的要求。我的意思是,您可以使用更简单的代码来重现此问题,以理解并了解如何解决此问题。而这不是变量缩进问题,否则它会向我发送indicationError。将所有方法作为一个类使用只是一个通用示例。我试着去做你提到的,但是所有的事情都是一样的,当调用方法在脚本中创建一个对象时是有效的,但是当我在其他类的其他脚本上使用相同的东西时,它根本不起作用。你介意分享整个代码吗?(删除任何敏感数据)我猜您在测试用例中误用了
    self
    ;我想你可能把你的生活复杂化了一点,试着用这个-它可能会有帮助。另外:
    从所有方法导入所有方法作为方法
    将其更改为更独特的方法。-这个问题本身很难理解,如果你想更新它,请告诉我,我会尽力帮助你。:)