2013-06-06 2 views
0

Я переживаю «Изучение Python The Hard Way», и я добрался до урока класса. Я понял это (или, по крайней мере, думаю, что сделал!) И попытался создать простой вариант, используя свои собственные имена, функции и т. Д.Проблемы вывода наследования класса (Python)

Теперь проблема заключается в том, что код не будет верните что-нибудь в командной строке \ powershell. У него нет никаких ошибок, он просто переходит к другой строке ввода.

Вот код:

class Animal(object): 
    '''represents any animal''' 
    def __init__(self, legs, size): 
     self.legs = legs 
     self.size = size 

    def detail_animal(self): 
     '''show # of legs and size''' 
     print "Name: %r\nAge: %r" % (self.legs, self.size) 

class canine(Animal): 
    '''represents a canine''' 

    def __init__(self, legs, size, hair_length): 
     Animal.__init__(self, legs, size) 
     self.hair_length = hair_length 

    def detail_canine(self): 
     Animal.detail(self) 
     print 'Has %r inch long hairs.' % self.hair_length 

class feral_cat(Animal): 
    '''represents a feral cat''' 

    def __init__(self, legs, size, tail_length): 
     Animal.__init__(self, legs, size) 
     self.tail_length = tail_length 

    def detail_feral(self): 
     Animal.detail(self) 
     print "Tail Length: %r" % tail_length 

c1 = canine(4, 2, 0.5) 
c2 = canine(5, 3, 0.75) 
fc1 = feral_cat(4, 5, 3) 
a = Animal(4, 2) 

Заранее спасибо!

+7

Что вы ожидаете от этого? Вы никогда не называете какие-либо методы, которые могли бы печатать что-либо, поэтому ничего не печатается. – kindall

+2

, чтобы расширить, о чем говорят, единственные функции, которые печатают что-либо, - это функции detail_ *. Вы строите кучу объектов, но не просите распечатать какую-либо деталь. – cmd

+0

animal_detail также предполагает, что животное названо по его числу ног. –

ответ

2

В вашем коде есть несколько проблем: класс Animal не имеет метода с именем detail, который вы пытаетесь вызвать во всех своих подклассах. Вероятно, вы должны переименовать detail_animal(self) в detail(self). Чтобы ваша программа печати некоторый вывода добавить эти строки в конце:

c1.detail_canine() 
c2.detail_canine() 
fc1.detail_feral() 
a.detail() 

Кроме того, если ваша программа предназначена для экспериментов с переопределением метода, то есть возможность переопределения методов базового класса в подклассах, вы должны попытаться изменить detail_canine(self) и detail_feral(self) - detail(self). Не забудьте внести изменения в строки, которые я предложил вам добавить! Вы увидите, что при создании экземпляра (т. Е. Создания) вызывается объект базового класса Animaldetail(self); когда вы создаете экземпляр одного из подклассов, который вместо этого вызывается метод класса detail(self).

Смежные вопросы