Python类没有属性

2024-06-16 10:49:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是很明显的事情,但我尝试了所有我能想到的,在这里看了这么多,我仍然坚持。

我一直在努力完成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'错误,我无法理解为什么。。。


Tags: nameselfisdefcattailroverdog
1条回答
网友
1楼 · 发布于 2024-06-16 10:49:29

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

相关问题 更多 >