1.python继承的基本概念
在程序中,继承描述的是多个类之间的所属关系。
如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。
那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。
继承:描述的类与类之间所属关系。
基本语法:
class 类8(类A)
pass
称为类 B 继承A
特点:B类的对象可以使用 A类的属性和方法
优点:代码复用。重复相同的代码不用多次书写
名词:
类A:父类 基类
类B:子类 派生类
# 定义是个 动物类 animal类
class Animal(object):
# 在animal类书写play方法,输出快乐的玩耍
def play(self):
print('快乐的玩耍...')
# 定义Dog类继承animal类
class Dog(Animal):
pass
# 创建dog类对象,调用父类的方法
dog = Dog()
dog.play()
2.继承分类:
"""
单继承:如果一个类只有一个父类,把这种继承关系称为单继承
多继承:如果一个类有多个父类,把这种继承关系称为多继承
多层继承:c-->B-->A
"""
# 定义是个 动物类 animal类
class Animal(object): # 对于Animal类和object类来说,单继承
# 在animal类书写play方法,输出快乐的玩耍
def play(self):
print('快乐的玩耍...')
# 定义Dog类继承animal类
# 定义Dog类继承animal类
class Dog(Animal): # Dog-->Animal 也是单继承,Dog-->Animal-->object 这种继承关系称为多层继承
def bark(self):
print('汪汪叫......')
# 定义类XTQ类,继承Dog类
# 多层继承中,子类可以使用所有继承链中的类中的方法和属性
class XTQ(Dog): # XTQ--->Dog 单继承,XTQ--->Dog-->Animal 类,多层继承
pass
xtq = XTQ()
xtq.bark() # 调用父类Dog中的方法
xtq.play() # 调用爷爷类 animal类中的方法
3.子类重写父类的同名方法(掌握)
重写:子类定义和父类名字相同的方法
为什么重写?
解释:父类中的方法,不能满足子类对象的需求,所以要重写。
重写之后特点:子类对象调用子类自己的方法,不在调用的方法,父类对象调用父类自己的方法
# 1.定义Dog类,书写bark方法,输出 汪汪汪叫
class Dog(object):
def bark(self):
print('汪汪汪叫')
# 2.定义XTQ类,重写父类中的方法,输出 嗷嗷嗷叫
class XTQ(Dog):
def bark(self):
print('嗷嗷嗷叫')
# 创建Dog类对象
dog = Dog()
dog.bark() # 父类自己
# 创建XTQ类对象
xtq = XTQ()
xtq.bark()
4.子类调用父类中的同名方法
在代码中解释
# 1.定义Dog类,书写bark方法,输出 汪汪汪叫
class Dog(object):
def bark(self):
print('汪汪汪叫')
# 2.定义XTQ类,重写父类中的方法,输出 嗷嗷嗷叫
class XTQ(Dog):
def bark(self):
print('嗷嗷嗷叫')
def see_host(self):
"""看见主人在之后,要汪汪叫,不能嗷嗷嗷叫"""
print('看见主人了,', end='')
# self.bark()
# 想要在子类中调用父类的同名方法
# 方法一:父类名.方法名(self,其他参数),通过实例对象.方法名()调用方法,不需要给self传递实参值,
# python解释器会自动将对象作为实参值传递给self形参,如果是通过类名.方法()调用,python解释器就
# 不会自动传递实参值,需要手动给self形参传递实参值
Dog.bark(self)
# 父类名(实参).方法名
# 方法二: supper(类A,self).方法名(参数名),会调用当类A的父类中的方法
super(XTQ, self).bark() # 调用XTQ类父类中的bark方法
# 方法三:是方法二的简写:super().方法名(参数)--等价于--super(当前类,self).方法名
super().bark()
# 创建XTQ类对象
xtq = XTQ()
xtq.see_host()
5.继承中的init(掌握)
# 1.定义Dog类
class Dog(object):
def __init__(self, name):
# 添加属性
self.age = 0
self.name = name
def __str__(self):
return f'小狗名字{self.name},小狗年龄{self.age}'
# 2.定义XTQ类继承Dog类
class XTQ(Dog):
# 子类重写了父类的__init__方法,默认不在调用父类的init方法,需要手动的调用父类的init方法
def __init__(self, name, color):
super().__init__(name) #调用父类中的形参
self.color = color #调用自己独有的形参
def __str__(self):
return f'小狗名字{self.name},小狗年龄{self.age},该颜色为{self.color}'
# 3.创建XTQ类对象
xtq = XTQ('小黄', '红色')
print(xtq)
注意:1.如果子类重写了父类的init