一:继承:
继承的意思相当于把父类中可以使用的方法写在自己类中一个性质
例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__) # 查询类继承的顺序== 调用方法的时候依次查询
运行截图: