一、继承:子类拥有父类的所有方法和属性(除了私有的)
作用:实现代码的重用
''' class 类名(父类名): pass '''
# 父类:方法和属性
class Person:
#成员变量
def __init__(self):
self.name=None
self.sex=None
#成员方法
def show(self):
print(f'{self.name},{self.sex}')
# 子类: 继承父类的成员变量和方法
class Emp(Person): # 子类需要指定自己的父类,才能产生继承关系
pass
#子类对象
emp =Emp()
#属性
emp.name='刘芳'
emp.sex='女'
#方法
emp.show()
"""
1、封装子类特有的属性和方法
2、父类私有成员不可被继承
"""
# Python 中针对类提供了一个内置属性 __mro__ 可以查看方法搜索顺序
# 查看某个类的继承关系 > 类名.双下划线mro__
#(<class '__main__.Emp'>, <class '__main__.Person'>, <class 'object'>)
print(Emp.__mro__)
'''
没有指名继承的Person类, 为什么是继承自这个object?
object类是所有类的父类, 没有指名的一些方法, 统统都是继承自object
自己没有的东西,优先找自己第一级父类,最准确的依据是根据继承关系
如果没有,继续往后找.....最终可以找到object.....
'''
二、重写:在子类中定义了和父类相同名称的方法
# 父类:方法和属性
class Person:
#成员变量
def __init__(self):
self.name=None
self.sex=None
#成员方法
def show(self):
print(f'{self.name},{self.sex}')
# 子类: 继承父类的成员变量和方法
class Emp(Person): # 子类需要指定自己的父类,才能产生继承关系
#重写方法
def show(self):
print('子类重写父类的方法!')
#子类对象
emp =Emp()
#属性
emp.name='刘芳'
emp.sex='女'
#方法
emp.show()
三、super调用父类的方法
""" super() 函数是用于调用父类(超类)的一个方法。 调用格式一: 父类名.方法名(对象) 调用格式二: super(子类名,对象).方法名() 调用格式三: super().方法名() """
# 父类:方法和属性
class Person:
#成员变量
def __init__(self):
self.name=None
self.sex=None
#成员方法
def show(self):
print(f'{self.name},{self.sex}')
# 子类: 继承父类的成员变量和方法
class Emp(Person): # 子类需要指定自己的父类,才能产生继承关系
#重写方法
def show(self):
print('子类重写父类的方法,调用父类的方法!!!')
# 调用一:父类名.方法名(对象) > 取父类
Person.show(self)
# 调用二:super(子类名, 对象).方法名()
super(Emp,self).show()
# 调用三:super().方法名() > 最方便,推荐大家使用
super().show()
def study(self):
#调用父类的方法:show()
super().show()
#调用子类的方法:show()
self.show()
#创建对象
emp =Emp()
#属性
emp.name='刘芳'
emp.sex='女'
#方法
emp.study()