首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python :对象在AttributeError中没有属性

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

Stack Overflow用户
提问于 2018-10-15 19:21:28
回答 3查看 4K关注 0票数 3

我有两个脚本,第一个是All_Methods,另一个是All_Testcases,因为我使用的是unittest框架,所以我们开始吧。

All_Methods类似于:

代码语言:javascript
运行
复制
class All_Services():
    def abc(self):
        x =1

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

    def cba(self):
        self.bca()

在另一个脚本All_TestCases上是这样的:

代码语言:javascript
运行
复制
from All_Methods import All_Services as service

    class All_TestCases(unittest.TestCase):
        def test_1_running_method(self)
            service.cba(self)

显示的异常情况为:

代码语言:javascript
运行
复制
AttributeError: 'All_TestCases' object has no attribute 'bca'

好心的人告诉我,我在这里错过了什么?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-10-15 19:28:39

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

当你调用Method.running_query_Athena(self)时,self是一个没有connecting_Athena方法的All_TestCases实例。

您的意思是让All_TestCasesAll_Methods派生吗

为什么All_Methods是一个类呢?

票数 2
EN

Stack Overflow用户

发布于 2018-10-15 19:30:30

  1. 使用适当的缩进,因为python完全基于代码的方式。请使用适当的命名约定;正如PEP 8.
  2. You're中建议的那样,尝试在没有实例的情况下访问实例方法。

尝试以下操作:

代码语言:javascript
运行
复制
class MyClass:
    def my_instance_method(self):
        return True

    @classmethod
    def my_class_method(cls):
        return True

    @staticmethod
    def my_static_method():
        return True

这是行不通的:

代码语言:javascript
运行
复制
>> MyClass.my_instance_method()
TypeError: my_instance_method() missing 1 required positional argument: 'self'

但是由于它们不绑定到正在创建的类实例,所以它们将会。

代码语言:javascript
运行
复制
MyClass.my_class_method()
MyClass.my_static_method()

实例方法需要实例化Class;这意味着您要使用:

代码语言:javascript
运行
复制
MyClass().my_instance_method()

因为您似乎想要在类实例上设置response_id;使用self参数来获取response_id。-我建议你使用一个实例方法来实例化这个类,如下所示(注意类名后面的() )

请修改您在问题中的格式。

票数 1
EN

Stack Overflow用户

发布于 2019-08-04 20:21:29

示例中的代码中有相当多的错误,但将其放在一边。

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

下面是这个问题的一个简化示例:

代码语言:javascript
运行
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52815621

复制
相关文章

相似问题

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