类继承(Python)输出问题

时间:2013-06-06 19:43:04

标签: python class inheritance

我正在经历'学习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)

提前致谢!

1 个答案:

答案 0 :(得分: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)。请记住在我建议您添加的行中进行更改!您将看到,当您实例化(即创建)基类Animal的对象时,detail(self)方法被调用;当您实例化其中一个子类时,将调用类的detail(self)方法。