Python类没有属性错误

时间:2014-05-18 05:00:07

标签: python class attributes

这可能是非常明显的事情,但我已经尝试了所有我能想到的东西并且在这里看了很多而且我仍然卡住了。

我一直在学习LearnPythonTheHardWay课程,目前在第42章,我一直在那里玩代码并添加一些东西:

http://learnpythonthehardway.org/book/ex42.html

我为'Dog'和'Cat'添加了一些函数和东西,当我只使用狗的打印命令(barks_often和wags_tail)运行它时它运行正常,当我尝试使用print命令时对于Cats的名字很好但是只要我为'drinks_milk'添加一个,它就会给我这个错误:

    PS C:\Users\David\python\lpthw> python ex42_more.py
Rover is a Dog
Rover barks often: True
Rover wags his tail: True
Satan is a Cat
Traceback (most recent call last):
  File "ex42_more.py", line 123, in <module>
    print "%s drinks milk: %s" % (satan.getName(), satan.dri
AttributeError: 'Cat' object has no attribute 'drinksMilk'

我所做的添加'drink_milk'与我为狗做的完全一样,所以我不明白为什么它不起作用,我尝试将其重命名为其他东西但是没有用。

这是我的代码:

## Animal is-a object (yes, sort of confusing) look at the extra credit
class Animal(object):
    def __init__(self, name, species):
        self.name = name
        self.species = species

    def getName(self):
        return self.name

    def getSpecies(self):
        return self.species



## class name Dog is-a animal
class Dog(Animal):

    def __init__(self, name, barks_often, wags_tail):
        Animal.__init__(self, name, "Dog")
        self.barks_often = barks_often
        self.wags_tail = wags_tail


    def barksOften(self):
        return self.barks_often

    def wagsTail(self):
        return self.wags_tail




## class Cat is-a animal
class Cat(Animal):

    def __init__(self, name, drinks_milk):
        Animal.__init__(self, name, "Cat")
        self.drinks_milk = drinks_milk


        def drinksMilk(self):
            return self.drinks_milk
## rover is-a Dog
rover = Dog("Rover", True, True)

## satan is-a Cat
satan = Cat("Satan", True)

print "%s is a %s" % (rover.getName(), rover.getSpecies())

print "%s barks often: %s" % (rover.getName(), rover.barksOften())

print "%s wags his tail: %s" % (rover.getName(), rover.wagsTail())

print "%s is a %s" % (satan.getName(), satan.getSpecies())

print "%s drinks milk: %s" % (satan.getName(), satan.drinksMilk())

我觉得这是一个缩进问题,你会发现def drinksMilk(self):比其他人稍微缩进,但这是因为当我把它放在正常位置并与其他defs一致时上面,我运行了它给我'IndentationError: unindent does not match any outer indentation level'错误的代码,我无法弄清楚为什么......

1 个答案:

答案 0 :(得分:4)

只是取消了这种方法。您可以看到它正常工作here

正确代码:

class Animal(object):
    def __init__(self, name, species):
        self.name = name
        self.species = species

    def getName(self):
        return self.name

    def getSpecies(self):
        return self.species



## class name Dog is an Animal
class Dog(Animal):

    def __init__(self, name, barks_often, wags_tail):
        Animal.__init__(self, name, "Dog")
        self.barks_often = barks_often
        self.wags_tail = wags_tail


    def barksOften(self):
        return self.barks_often

    def wagsTail(self):
        return self.wags_tail




## class Cat is an Animal
class Cat(Animal):
    def __init__(self, name, drinks_milk):
        Animal.__init__(self, name, "Cat")
        self.drinks_milk = drinks_milk

    def drinksMilk(self):
        return self.drinks_milk

## rover is a Dog
rover = Dog("Rover", True, True)

## satan is a Cat
satan = Cat("Satan", True)

print "%s is a %s" % (rover.getName(), rover.getSpecies())

print "%s barks often: %s" % (rover.getName(), rover.barksOften())

print "%s wags his tail: %s" % (rover.getName(), rover.wagsTail())

print "%s is a %s" % (satan.getName(), satan.getSpecies())

print "%s drinks milk: %s" % (satan.getName(), satan.drinksMilk())