我无法让 super() 在 python 2.7 中工作

2024-02-21

通过一对简单的课程,我无法获得超级工作:

class A(object):
    q = 'foo'
class B(A):
    q = 'bar'
    def __init__(self):
        self.a = super(A, self).q
a = B()

像这样的错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-210-802575054d17> in <module>()
      5     def __init__(self):
      6         self.a = super(A, self).q
----> 7 a = B()

<ipython-input-210-802575054d17> in __init__(self)
      4     q = 'bar'
      5     def __init__(self):
----> 6         self.a = super(A, self).q
      7 a = B()

AttributeError: 'super' object has no attribute 'q'

我已经研究过堆栈交换上的类似问题,阅读了文档和文章,并且从各方面来看,这应该可行。我错过了什么明显的事情?

编辑:答案是我引用了错误的类,修复它可以修复示例,但不是我的真实代码,如下所示:

class D(object):
    pwd = ['~/']
    def __init__(self,*args):
        if len(args) == 1:
            self.cd(args[0])
        else:
            return
    def __str__(self):
        if len(self.pwd) == 1:
            return self.pwd[0]
        else:
            return ''.join(self.pwd)
    def __add__(self,other):
        if type(other) is str:
            return str(self) + other
        elif type(other) is list:
            return pwd + other
    def cd(self, directory):
        #import pdb; pdb.set_trace()
        reset = False
        if directory[0] is '~':
            reset = True
        if directory[0] is '/':
            reset = True
            directory = directory[1:]
        if directory[-1] is '/':
            directory = directory[:-1]
        directory = [folder+'/' for folder in directory.split('/')]
        rverse = directory.count('../')
        if rverse > 0 and type(directory) is list:
            end = False
            for folder in directory:
                if folder == '../' and end:
                    raise Exception('improperly placed ".."')
                if folder != '../':
                    end = True
        if reset:
            self.pwd = directory
        else:
            self.pwd = self.pwd + directory
        print self
class Dirchanger(D):
    def __init__(self,client,*args):
        if len(args) == 1:
            self.cd(args[0])
    def cd(self,directory):
        super(D, self).cd(directory)

显然,该代码不完整,但它应该根据答案工作。


您正在使用wrong搜索目标(第一个参数);使用super(B, self)反而:

def __init__(self):
    self.a = super(B, self).q

第一个参数给出super()一个起点;它的意思是查看 MRO,从我给你的下一堂课开始,其中 MRO 是方法解析顺序second争论 (type(self).__mro__).

通过告诉super()开始回顾过去A,你有效地告诉了super()开始搜索距离 MRO 太远。object是下一个,并且该类型没有have a q属性:

>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)

你的真实代码有完全相同的问题:

class Dirchanger(D):
    def __init__(self,client,*args):
        if len(args) == 1:
            self.cd(args[0])
    def cd(self,directory):
        super(D, self).cd(directory)

您开始 MRO 搜索的位置为D, not Dirchanger here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我无法让 super() 在 python 2.7 中工作 的相关文章

随机推荐

  • 如何通过脚本从sql server代理获取失败的作业?

    我想获取 sql server 代理无法通过 sql 脚本启动或运行的失败作业 我创建了一个视图来获取sql server中失败的作业 CREATE VIEW dbo View Failed Jobs AS SELECT Job insta
  • 为什么遇到 302 响应时 WCF 无法调用 SOAP 服务?

    我编写了一个应用程序 首先调用 WCF 进行登录 我生成了带有服务引用的客户端代码 对于将服务安装到网络本地的客户来说 它工作得很好 然而 也有一个 SaaS 环境 其中这些相同的服务由企业权力控制 saas环境下 提示登录失败 使用 Fi
  • Javascript 多重或条件检查

    我进行了一些简单的 if else 检查 var IsCompanyContacttitleUpdate false var ContactStatus 1 if IsCompanyContacttitleUpdate false Cont
  • 无法使用 adb 从 Android 设备提取 APK

    我正在尝试从我的设备获取已安装应用程序的 APK 我正在按照中的说明进行操作这个答案 https stackoverflow com a 18003462 5466997但是在拉取它时 adb 说 APK 不存在 这是具体步骤 adb sh
  • 如何将Json对象从ajax传递到spring mvc控制器?

    我正在 SpringMVC 上工作 我正在将数据从 ajax 传递到控制器 但我的控制器中得到空值 请检查下面的代码 function searchText var sendData pName bhanu lName prasad aja
  • 在我的流程中了解 NIFI 中的通知和等待流程

    我是 NIFI 流程的新手 在我当前的工作中 我有通知和等待流程 有人可以帮助我理解这个流程吗 On what basis the Notify work in my case we have 4 schema files process
  • 获取第一行数据(如果存在于 SQLite 中)

    我正在编写一个应用程序 其中如果存在于 SQLite 数据库表中 我需要获取第一行数据 我已经编写了将数据存储到数据库中的代码 但现在我想从数据库中获取第一行数据到 TextView 中 助手类 Select Data public Str
  • Django - 在 render_change_form 中获取对象 ID (ModelAdmin)

    我有这两个模型和 modeladmin 在可用主机用户列表中添加新主机时 仅显示未分配给其他主机的主机用户 问题是 如果我编辑一个已经创建的主机 它的实际主机用户 ID 也会被过滤 所以我想要做的是排除当前分配的主机用户 ID 如何在从主机
  • Chrome 内容脚本不起作用:DOMContentLoaded 侦听器不执行

    我正在尝试编写可纠正 1 个论坛上的拼写错误的扩展代码 我正在尝试访问 p 标签 带有内容脚本 但它不会改变任何内容 使用下面的代码 document addEventListener DOMContentLoaded function d
  • 找不到“UIView”的接口声明

    我正在尝试添加一个目标 C祝酒图书馆 https github com scalessec Toast到我的 xcode 项目 但我收到了一些这样的错误 Cannot find interface declaration for UIVie
  • msiexec.exe - 嵌入

    我正在使用基于云的 EDR 平台来监控客户端受感染网络上发生的进程 我最近经常看到的是使用选项 Embedding 调用 msiexec exe C Windows System32 MsiExec exe Embedding 35507F
  • 当连续输入错误时,循环中断java

    当您连续两次输入随机值 例如 i 时 程序将终止 我希望 无效数据 请重试 和 您想再玩一次吗 不断重复 直到输入 N 或 Y 7 8 5 No numbers match Do you want to play again i Inval
  • 除法不返回我期望的十进制值[重复]

    这个问题在这里已经有答案了 可能的重复 这个部门有什么问题吗 https stackoverflow com questions 704702 whats wrong with this division 如果你分2 3 它应该返回0 66
  • 适用于 OSX 和 Windows 应用程序的 Eclipse info.plist 文件

    当我寻找隐藏 Java 应用程序停靠图标的方法时 我到处都看到info plist 文件这个 and info plist 文件表示 但我没有看到一个 我的问题是如何在 eclipse 中生成 info plist 文件 它属于哪里 当我导
  • 如何在 iPhone 的导航栏中添加右栏按钮

    我想在导航栏中添加一个右栏按钮项目 以便单击时执行某些功能 我创建了以下代码来添加右侧栏按钮项目 但完成后 栏按钮项目没有显示在导航栏中 void viewDidload self navigationItem rightBarButton
  • 从文件夹中的图像序列获取 numpy 数组

    我有一个文件夹 比如说video1一堆按顺序排列的图像frame 00 png frame 01 png 我想要的是格式为 4D numpy 数组 number of frames w h 3 这就是我所做的 但我认为它很慢 有没有更快或更
  • 在哪里可以找到图形命令 shell?

    终端和 shell 非常强大 但学习起来可能很复杂 尤其是要充分利用它们 有谁知道有一个更加基于 GUI 的命令 shell 可以帮助用户或以更友好的方式显示答案 我知道 IPython 但即使它的语法也有点复杂 尽管这是朝着正确方向迈出的
  • 将片段从 GraphQL 文件导入到另一个 GraphQL 文件不起作用

    我正在尝试使用 graphql 文件并传递变量来对空手道进行测试 在我的 graphql 模式上 我试图重用另一个 graphql 文件中的片段 我尝试按照以下说明进行操作https www apollographql com docs r
  • 为什么GetType成功时FindType却获取不到RTTI?

    我正在尝试使用来抓住一个物体TRttiContext FindType QualifiedTypeName 这是我所得到的 program MissingRTTI APPTYPE CONSOLE uses System SysUtils R
  • 我无法让 super() 在 python 2.7 中工作

    通过一对简单的课程 我无法获得超级工作 class A object q foo class B A q bar def init self self a super A self q a B 像这样的错误 AttributeError T