一:继承:
继承的意思相当于把父类中可以使用的方法写在自己类中一个性质

例1:创建一个人类,分男人类与女人类
属性:姓名、年龄
方法:吃、走 ====》公共特征
男:方法==》上班
女:方法==》洗衣服
class People: # 父类,可以理解为一个较为抽象的类,具体细分由下面的子类完成
# 公共代码放置位置
def __init__(self,name,age):
self.name=name
self.age=age
def run(self):
print('%s走路'%self.name)
def eat(self):
print('吃东西')
# 继承People类:继承的意思相当于把以上可以使用的方法写在自己的类中一个性质
class man(People): # 男人类
def work(self):
print('%s上班'%self.name)
# 继承People类
class woman(People):
# class woman(man):
def watch(self):
print('%s洗衣服'%self.name)
# 实例化
xiaoming=man('小明',20)
xiaoming.run()
xiaoming.work()
#
xiaohua=woman('小花',19)
xiaohua.run()
xiaohua.watch()
# xiaohua.work() # 不能访问小明的方法,子类之间的方法不可以互相访问,除非woman继承man类
# __bases__查看类继承的直接父级(通过类名)
print(woman.__bases__) # (<class '__main__.man'>,) 继承
print(man.__bases__) # (<class '__main__.A'>,) 继承people
print(People.__bases__) # (<class 'object'>,)
# print(xiaohua.__bases__) # 错误写法
运行截图:

例2:多继承:
重写:当子类继承父类之后,如果子类不想使用父类的方法,可以通过重写来覆盖父类的方法

class base:
def __init__(self,name,age):
self.name=name
self.age=age
def run(self):
print('%s走路'%self.name)
def eat(self):
print('吃东西')
class Father(base): # 爸爸类
def work(self):
print('%s上班'%self.name)
def cook(self):
print('%s做饭好难吃'%self.name)
class Mother(base): # 妈妈类
def watch(self):
print('%s洗衣服' % self.name)
def cook(self):
print('%s做饭真好吃'%self.name)
# 如果Father在前面先继承Father类,优先级
class Son(Father,Mother):
# 重写:当子类继承父类之后,如果子类不想使用父类的方法,可以通过重写来覆盖父类的方法
def cook(self):
# pass
print('%s做饭最好吃!!!'%self.name)
xiaoming=Son('小明',20)
#
xiaoming.watch()
xiaoming.work()
xiaoming.run()
xiaoming.eat()
xiaoming.cook() # Father在前面先继承
print(Son.__mro__) # 查询类继承的顺序== 调用方法的时候依次查询 object是所有类的父类
运行截图:

例3:重写父类方法之后,如果又需要使用父类的方法呢?
super().money() # 如果自己的资金不够就把父类的也拿过来
class base:
def __init__(self,name,age):
self.name=name
self.age=age
def run(self):
print('%s走路'%self.name)
def eat(self):
print('吃东西')
class Father(base):
def work(self):
print('%s上班'%self.name)
def cook(self):
print('%s做饭好难吃'%self.name)
def money(self):
print('爸爸有10万')
class Mother(base): # 多继承
def watch(self):
print('%s洗衣服' % self.name)
def cook(self):
print('%s做饭真好吃'%self.name)
def money(self):
print('妈妈有5万')
class Son(Mother,Father): # 哪个在前面先继承哪个类
def cook(self): # 重写(新建一个新的类与父类方法名一样的时候),重写就不再使用父类的方法
# pass
super().cook() # 在使用的重写的时候再去拿父级的方法,重写了的话就使用自己的
# super().watch()
Father.cook(self) # 这样写先继承A类===》可以理解准确性的继承
print('%s做饭最好吃!!!'%self.name)
def money(self):
super().money() # 如果自己的资金不够就把父类的也拿过来
Father.money(self) # 继承爸爸类
print('我有一万!!!')
xiaoming=Son('小明',20)
xiaoming.watch()
xiaoming.work()
xiaoming.run()
xiaoming.eat()
xiaoming.cook() # Mother在前面先继承
xiaoming.money()
print(Son.__mro__) # 查询类继承的顺序== 调用方法的时候依次查询
运行截图:
