要理解继承首先要有父类
和子类
的概念,可以理解成子类从父类中继承父类的属性和方法
创建父类
python
class Pet:
def __init__(self,name,age):
self.name = name
self.age = age
def jump(self):
print(self.name+"在跳")
创建子类
python
class Cat(Pet):
pass
mycat=Cat("白白",2)
print(mycat.jump())
如果您不想向该类添加任何其他属性或方法,就使用 pass 关键字。
现在,Cat 类拥有与 Pet 类相同的属性和方法。
为子类添加新的属性或方法
python
class Pet:
def __init__(self,name,age):
self.name = name
self.age = age
def jump(self):
return(self.name+"在跳")
class Cat(Pet):
def miao(self):
return(self.name+"在叫")
def jump(self):
return(self.name+"在跳个不停")
mycat=Cat("白白",2)
print(mycat.jump())
print(mycat.miao())
当子类调用函数时,会先在自身寻找,如果没有就去父类寻找,所以当我们有定义了一遍jump后不会再调用父类里的jump,同时我们也可以定义自己专属的函数,
此时有个问题,如果我要在__init__
里新增属性怎么办呢,比如猫我想让他有花纹,而狗我不想让他有花纹,self.pattern=True
和self.pattern=False
该怎么办
如果我们像刚刚一样,去新写一个__init__
,就只能把原来的name和age再写一遍,因为调用子类的__init__
后父类的是不会调用的
此时就引出了super
方法
super方法
super会返回当前类的父类
python
class Pet:
def __init__(self,name,age):
self.name = name
self.age = age
def jump(self):
return(self.name+"在跳")
class Cat(Pet):
def __init__(self,name,age):
super().__init__(name,age)
self.pattern=True
class Dog(Pet):
def __init__(self,name,age):
super().__init__(name,age)
self.pattern=False
mycat=Cat("miao",2)
mydog=Dog("woof",3)
print(mycat.pattern)
print(mydog.pattern)
print(mycat.age)
print(mydog.age)
这里有两点要注意
- 子类里的
__init__
里的参数要包含父类的参数,这样子后面才能super().__init__(name,age)
,否则会报错 - 这样子把要新添的参数放入函数的形参里也是没有问题的,还可以设定初始值
python
class Cat(Pet):
def __init__(self, name, age, pattern=True):
super().__init__(name, age)
self.pattern = pattern