Проблемы несовместимости кода - Python 2.x / Python 3.x - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть этот код:

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: у объекта 'super' нет атрибута 'process'

Мне кажется,что есть метод "процесс" для супер-вызова.Питон говорит, что «супер» является независимым объектом, не связанным с инструкцией?Если да, как я могу сказать, что super должен вызывать только конструктор базового класса?

Если нет, как я буду действовать?Спасибо за любые идеи.

1 Ответ

1 голос
/ 19 сентября 2019

Вы передаете неправильный класс на super в своем вызове.Вам нужно передать класс, из которого вы делаете вызов, а не базовый класс.Измените его на это, и оно должно работать:

super(LDAInstruction, self).process()

Это не связано с вашей основной ошибкой, но я бы также отметил, что реализация базового класса process, вероятно, имеет ошибку при попытке ввода строкиформатирование.Вы, вероятно, хотите {0} вместо () в строке формата.В Python 2.7 и более поздних версиях вы можете опустить 0 и просто использовать {}, но для Python 2.6 вы должны быть явными.

...