最新要闻

广告

手机

Windows 11首个累积补丁出炉

Windows 11首个累积补丁出炉

“体育+文旅”更多“沉睡”体育资源被盘活 带动乡村百姓增收致富

“体育+文旅”更多“沉睡”体育资源被盘活 带动乡村百姓增收致富

家电

继承、多继承、魔术方法知识点总结

来源:博客园


(资料图)

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

运行截图:

关键词: