0

我正在经历“Learning Python The Hard Way”,然后我开始上课了。我理解它(或者我至少认为我理解了!)并尝试使用我自己的名字、函数等创建一个简单的变体......

现在我遇到的问题是代码不会在命令行\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)

提前致谢!

4

1 回答 1

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)方法被调用的子类之一时。

于 2013-06-06T20:09:13.390 回答