我目前正在学习如何使用Python编程,但我一直坚持从Parent类调用属性。在下面的示例中,如何在“雏菊”上调用属性"name"
以打印名称。我总是收到错误消息"'Mammal' object has no attribute 'name'
。
class Vertebrate:
spinal_cord = True
def __init__(self, name):
self.name = name
class Mammal(Vertebrate):
def __init__(self, name, animal_type):
self.animal_type = animal_type
self.temperature_regulation = True
daisy = Mammal('Daisy', 'dog')
print(daisy.name)
在这里我要打印在Vertebrate类中定义的名称,但是总是出现错误
"'Mammal' object has no attribute 'name'"
答案 0 :(得分:0)
您需要在哺乳动物的__init__
中调用超级,就像这样:
class Mammal(Vertebrate):
def __init__(self, name, animal_type):
super().__init__(name)
self.animal_type = animal_type
self.temperature_regulation = True
调用哺乳动物的__init__
时,它不会自动调用其父类的__init__
,这就是super在这里所做的事情。
答案 1 :(得分:0)
当您给子类分配一个初始化函数时,它将覆盖被调用的父类的默认初始化函数。在这种情况下,您需要使用super函数显式调用父类。您还需要将Vertebrate类分配为Object类的子级,以便能够访问其中的所有对象模块。
class Vertebrate(object):
def __init__(self, name):
self.name = name
spinal_cord = True
class Mammal(Vertebrate):
def __init__(self, name, animal_type):
super(Mammal, self).__init__(name)
self.animal_type = animal_type
self.temperature_regulation = True
animal = Mammal("Daisy", "dog")
print animal.name