我有以下代码:

from abc import ABCMeta, abstractmethod

class Instruction (object):
   __metaclass__ = ABCMeta

   def __init__(self, identifier_byte):
      #type: (int) ->
      self.identifier_byte = identifier_byte

   @abstractmethod
   def process (self):
      print ("Identifier byte: ()".format(self.identifier_byte)) 

class LDAInstruction (Instruction): 
   def process (self):
       super(Instruction,self).process()

使用Python 3.2可以正常工作,但不能使用2.6。 然后基于此主题: TypeError:super()至少接受1个参数(给定0)错误是特定于任何python版本的吗?

我将最后一行更改为:

super(Instruction,self).process()

这会在此精确行上导致此错误消息:

AttributeError:“超级”对象没有属性“进程”

对我来说,似乎有一个用于超级调用的“过程”方法。 Python是否说“ super”是一个独立的对象,与指令无关? 如果是,我如何告诉它super只能调用基类的构造函数?

如果没有,我将如何进行? 感谢您的任何想法。

#1楼 票数:1

您正在将错误的类传递给super呼叫。 您需要传递进行调用的类,而不是基类。 更改为此,它应该工作:

super(LDAInstruction, self).process()

它与您的主要错误无关,但我还要指出, process的基类实现可能在尝试格式化字符串时出错。 您可能希望格式字符串中使用{0}而不是() 在Python 2.7及更高版本中,您可以省略0 ,而仅使用{} ,但是对于Python 2.6,则必须明确。

  ask by user2752471 translate from so

未解决问题?本站智能推荐:

1回复

代码不兼容问题-Python 2.x / Python 3.x

我有以下代码: 使用Python 3.2可以正常工作,但不能使用2.6。 然后基于此主题: TypeError:super()至少接受1个参数(给定0)错误是特定于任何python版本的吗? 我将最后一行更改为: 这会在此精确行上导致此错误消息: Attribu
1回复

在Python 2.6+中使用super(...)时如何避免样板?

是否有良好的(适合在实际项目中使用)方式或减少这样的事情的样板 我希望它看起来更像这样: 或者(更现实地) 是否可以在Python 2.6+中没有明显的黑客攻击? 没有args的Python 2.x中的 @link super()
1回复

字符串格式的占位符,最大程度地与python 2.6、2.7和3.x兼容

我应该将哪些占位符与字符串的.format()方法结合使用,以便在与python解释器的.format()和3.x(在我的情况下为3.2)结合使用时兼容? 我开始使用{:}占位符,但这不适用于2.6。 现在,我正在使用{<index-of-format-tuple>} ,它似
1回复

Python2.x / 3.x兼容性:“错误:AttributeError:'指令'对象没有属性'identity_byte'

您好,我目前在运行程序时遇到标题错误消息。 identity_byte在构造函数中明确定义,所以我不知道为什么他找不到它。 实际上,Python 2.6确实找到了它,并且可以毫无问题地运行我的程序。 但是python 3.2显示了错误消息。 下面是在Python 3.2下运行它的
1回复

为什么 Python 3.x 的 super() 很神奇?

在 Python 3.x 中,可以不带参数调用super() : class A(object): def x(self): print("Hey now") class B(A): def x(self): super().x() >&g
4回复

'super().__init__()' 在 python 3.x 中是什么意思?

这两个代码示例有什么区别? 1: 2:
2回复

在Python中使用super()关键字的单继承的基本示例是什么?

假设我已经设置了以下类: 我怎么能(如果我可以)在这个上下文中使用super()来消除重复的代码?
2回复

如何从3.x编译2.x的python代码

我想从3.2脚本为目标2.7编译python代码。 下面的工作正常进行编译。 但是在执行时,由于编译和目标python版本不同,我显然会收到“错误的幻数错误”。 是否可以不从3.2内部执行2.7 python? 有没有办法提及目标版本? 谢谢。
5回复

Python的“超级”如何做正确的事情?

我正在运行Python 2.5,因此这个问题可能不适用于Python 3.当您使用多重继承创建钻石类层次结构并创建派生最多类的对象时,Python会执行Right Thing(TM)。 它调用派生最多类的构造函数,然后调用从左到右列出的父类,然后是祖父母。 我熟悉Python的MRO ;
2回复

Python调用超级构造函数

这个问题已经在这里有了答案: 对于新样式的类,super()引发“ TypeError:必须为类型,而不是classobj” 7答案 我正在使用模块HTMLParser并想要创建一个子类。 但是我无法调用超级构造函数,我做错了什么? 堆栈跟踪: