2013-12-17 3 views
0

Я только начал писать код на Python. Я использую Windows 8. У меня есть следующий код, и он не работает. Однако код отлично работал на Ubuntu. Версия python такая же для обеих ОС.Наследование в python не работает

class test: 
     def __init__(self): 

      def add(self,a,b): 
        print a+b 

class subclass(test): 
    print "testing" 


s = subclass() 

s.add(1,2) 

Выход приведен ниже:

s.add(1,2) 

AttributeError: subclass instance has no attribute 'add' 

PS: Там нет проблем идент.

+0

вы создаете метод '' add' внутри __init__' метода? –

+1

ahahah, так что «Нет проблем с идентификатором» означает, что никаких ошибок отступа не сообщается обратно :) Вы не должны добавлять, но удалять некоторые (5 кажется) пробелы перед добавлением и удалять неиспользуемые 'def __init __ (self):' строка – alko

+0

Да, вы получите ошибку отступа и это потому, что ваш метод '__init__' должен содержать по крайней мере одну допустимую строку кода после объявления. Если вы не хотите добавлять какие-либо записи, просто напишите инструкцию 'pass'. http://dpaste.com/hold/1510285/ –

ответ

1

Если отступы в порядке, как указано, вы должны добавить

self.add = add 

к вашему __init__. Прямо сейчас вы объявляете функцию добавления в локальной области __init__, но нигде не назначаете ее, чтобы она сразу же собирала мусор.

обновление

В нет никаких проблем с отступом заявил автор, кажется, относится к коду быть успешно исполнителем без IndentationError поднял, правильная линия действий, как представляется, в равной степени отступа __init__ и add, чтобы сделать их как методы экземпляра, и удалить пустой __init__ или добавить pass заполнитель:

class test: 
    def __init__(self): pass 
    def add(self,a,b): 
     print a+b 

class subclass(test): 
    print "testing" 
2

Если ваш код с отступом по желанию то функция add() существует только в пределах __init__() и никогда не становится частью класса. Существует нет возможного способа, чтобы ваш код мог работать, даже если у вас был экземпляр test.

+0

На данный момент для автора 'code works', похоже, означает' пробеги без исключений '. – alko

0

Почему у вас есть пустой init метод? Если вам это нужно, ошибка выполнения init будет пустой. Вы можете попробовать:

class test: 
    def __init__(self): 
     pass 
    def add(self, a, b): 
     print a+b 

Или:

class test: 
    def add(self, a, b): 
     print a+b 
Смежные вопросы