Shi*_*ena -1 python inheritance class object
我已经尝试过阅读一些不同的教程,但我仍然无法弄明白.我有两个简单的课程.动物和猫.
class Animal:
def __init__(self, name):
self.name = name
class Cat(Animal):
def __init___(self, age):
self.age = age
print('age is: {0}'.format(self.age))
def talk(self):
print('Meowwww!')
c = Cat('Molly')
c.talk()
Run Code Online (Sandbox Code Playgroud)
输出是:
Meowwww!
Run Code Online (Sandbox Code Playgroud)
代码运行,但我有点困惑.我创建了一个cat类的实例c = Cat('Molly')
.因此,不知何故,通过使用"Molly"
作为Cat()
类实例的参数,它将提供"Molly"
给原始基类(Animal
)而不是Cat
我创建的类实例?为什么?那么如何为Cat
类实例提供age
它需要的变量呢?
我试过做:
c = Cat('Molly', 10)
Run Code Online (Sandbox Code Playgroud)
但它抱怨太多的争论.其次,为什么不会__init__
调用Cat类的功能?它应该打印"年龄是......".它永远不会.
编辑:得到它的工作,感谢Martijn Pieters!这是更新的代码(适用于python3):
class Animal():
def __init__(self, name):
self.name = name
print('name is: {0}'.format(self.name))
class Cat(Animal):
def __init__(self, name, age):
super().__init__(name)
self.age = age
print('age is: {0}'.format(self.age))
def talk(self):
print('Meowwww!')
c = Cat('Molly', 5)
c.talk()
Run Code Online (Sandbox Code Playgroud)
你错了拼写__init__
:
def __init___(self, age):
# 12 345
Run Code Online (Sandbox Code Playgroud)
这是最后的3个双下划线,而不是所需的2个.
因此,Python不会调用它,因为它不是它正在寻找的方法.
如果要传入年龄和名称,请为方法指定另一个参数,然后__init__
使用名称调用父级:
class Cat(Animal):
def __init__(self, name, age):
super().__init__(name)
self.age = age
Run Code Online (Sandbox Code Playgroud)