python - Python类没有属性错误

标签 python class attributes

这可能是很明显的事情,但我尝试了所有我能想到的,在这里看了这么多,我仍然坚持。
我一直在努力完成LearnpythotherHardway课程,目前正在学习第42章,我一直在那里玩代码,并添加了一些东西:
http://learnpythonthehardway.org/book/ex42.html
我为“Dog”和“Cat”添加了一些要打印的功能和内容,当我只使用狗的打印命令(经常吠叫和摇尾巴)运行它时,它工作正常,当我尝试使用猫名的打印命令时,它工作正常,但当我为“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'

我加了“饮料牛奶”和我给狗做的完全一样,所以我不明白为什么它不起作用,我试着把它改名为其他东西,但那不起作用。
这是我的代码:
## 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):缩进的比其他的稍微多一些,但这是因为当我把它放在正常位置并且与上面的其他def一致时,我运行了代码,它给了我'IndentationError: unindent does not match any outer indentation level'错误,我不明白为什么。。。

最佳答案

只是不了解那种方法。您可以看到它正常工作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())

关于python - Python类没有属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718710/

相关文章:

python - 标准输入非交互式时如何清除python中的标准输入缓冲区

r - R 中的自定义属性传播

python - Go - 我如何在 go 代码中执行此 python 代码?

Python - 检查列表中是否存在所有 n 个数字

javascript - 具有扩展类和模块的 es6 变量作用域

python - 当作为参数传递给 range() 时,如何告诉 PyCharm 类实例可以通过 __index__ 方法解释为整数?

ruby - Ruby 模块中的私有(private)类(不是类方法)?

c# - Asp Net Identity - 声明与自定义 IdentityUser

c# - Asp.net mvc 带有@的显示名称属性

python - 尽管处于不同的框架中,网格和包仍存在冲突