Python基础(面向对象:继承、mro、私有权限)-----11(20200930)

    科技2023-11-13  69

    一、继承

    1.概念:指多个类之间的所属关系,即子类默认继承父类的所有属性和方法。

    2.写法:

    object:是顶级类或基类,所有类默认继承object类,其他子类叫做派生类。

    class A(object): def __init__(self): self.name = '王五' def print_info(self): print(self.name) class B(A): pass r = B() r.print_info() #王五

    3.作用:化简代码

    二、单继承:一个父类继承给一个子类,单一的继承关系。

    class Master(object): def __init__(self): self.teacher = '读英语' def speack(self): print('用英语进行交流') class student(Master): pass stu1 = student() print(stu1.teacher) stu1.speack() #读英语 #用英语进行交流

    三、多继承

    1.概念:一个子类继承多尔父类

    2.写法:

    class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class School(object): def __init__(self): self.kongfu = '[黑马煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class prentice(School,Master): pass daqiu = prentice() print(daqiu.kongfu) daqiu.make_cake() #[黑马煎饼果子配方] #运用[黑马煎饼果子配方]制作煎饼果子

    3.特点:

    总结:继承多个父类时,按照括号内父类写的顺序进行继承

    默认使用第一个父类的同名属性和方法。

    四、子类重写父类同名属性和方法

    class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class School(object): def __init__(self): self.kongfu = '[黑马煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class prentice(School,Master): def __init__(self): self.kongfu = '[独创煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') daqiu = prentice() print(daqiu.kongfu) daqiu.make_cake() #[独创煎饼果子配方] #运用[独创煎饼果子配方]制作煎饼果子

    总结:子类继承多个父类时,子类和多父类有同名同属性同方法时,创建子类对象时,用对象调用同名方法,只执行子类方法,不执行父类方法。

    五、mro的用法

    1.作用:求子类继承父类的层级关系

    格式:子类类名.__ mro__

    print(prentice.__mro__) #(<class '__main__.prentice'>, <class '__main__.School'>, <class '__main__.Master'>, <class 'object'>)

    六、子类调用父类同名属性和方法

    class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class School(object): def __init__(self): self.kongfu = '[黑马煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class prentice(School,Master): def __init__(self): self.kongfu = '[独创煎饼果子配方]' def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') def make_Master_cake(self): Master.__init__(self) Master.make_cake(self) def make_School_cake(self): School.__init__(self) School.make_cake(self) daqiu = prentice() print(daqiu.kongfu) daqiu.make_cake() daqiu.make_Master_cake() daqiu.make_School_cake() daqiu.make_cake() #[独创煎饼果子配方] #运用[独创煎饼果子配方]制作煎饼果子 #运用[古法煎饼果子配方]制作煎饼果子 #运用[黑马煎饼果子配方]制作煎饼果子 #运用[独创煎饼果子配方]制作煎饼果子

    总结:子类中调用父类方法,需要在子类重新定义方法去调用父类的初始化函数和方法,子类创建对象调用子类自己的方法时,子类自己的方法中需重新调用一次自己的初始化方法,如果不调用,代码从上往下执行,初始值会记录上次的值,再次调用子类自己的方法取得不是子类自己的初始值,而是上次代码执行的值。

    七、多层继承

    class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class School(Master): def __init__(self): self.kongfu = '[黑马煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class prentice(School,Master): def __init__(self): self.kongfu = '[独创煎饼果子配方]' def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') def make_Master_cake(self): Master.__init__(self) Master.make_cake(self) def make_School_cake(self): School.__init__(self) School.make_cake(self) class Tusun(): pass xiaoqiu = prentice() print(xiaoqiu.kongfu)#[独创煎饼果子配方] xiaoqiu.make_cake()#运用[独创煎饼果子配方]制作煎饼果子 xiaoqiu.make_Master_cake()#运用[古法煎饼果子配方]制作煎饼果子 xiaoqiu.make_School_cake()#运用[黑马煎饼果子配方]制作煎饼果子 xiaoqiu.make_cake()##运用[独创煎饼果子配方]制作煎饼果子 print(Tusun.__mro__)#Tusun->object

    八、super()调用父类方法

    1.作用:调用父类方法,

    2.写法:

    方法1:super(当前类名,self).函数()

    方法2:super().函数() (工作中常用此方法)

    使用super()方法自动查找父类,调用顺序遵循mro的顺序

    class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class School(Master): def __init__(self): self.kongfu = '[黑马煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') # super(School,self).__init__() # super(School,self).make_cake() # super().__init__() # super().make_cake() class prentice(School,Master): def __init__(self): self.kongfu = '[独创煎饼果子配方]' def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') def make_old_cake(self): super().__init__() super().make_cake() xiaoqiu = prentice() print(xiaoqiu.kongfu)#[独创煎饼果子配方] xiaoqiu.make_cake()#运用[独创煎饼果子配方]制作煎饼果子 xiaoqiu.make_old_cake()#运用[黑马煎饼果子配方]制作煎饼果子 print(prentice.__mro__)#(<class '__main__.prentice'>, <class '__main__.School'>, <class '__main__.Master'>, <class 'object'>)

    九、私有权限

    1.作用:如果继承方法和属性,不想继承给子类,只为自己使用,这时候需要设置为私有属性和私有方法。

    2.写法:在属性名和方法名 前面 加上两个下下划线__

    3.私有属性:

    class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class School(Master): def __init__(self): self.kongfu = '[黑马煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') # super(School,self).__init__() # super(School,self).make_cake() # super().__init__() # super().make_cake() class prentice(School,Master): def __init__(self): self.kongfu = '[独创煎饼果子配方]' # self.money = 2000 self.__money = 2000 def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') def make_old_cake(self): super().__init__() super().make_cake() xiaoqiu = prentice() print(xiaoqiu.money) #AttributeError: 'prentice' object has no attribute 'money'

    4.私有方法:

    class Master(object): def __init__(self): self.kongfu = '[古法煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') class School(Master): def __init__(self): self.kongfu = '[黑马煎饼果子配方]' def make_cake(self): print(f'运用{self.kongfu}制作煎饼果子') # super(School,self).__init__() # super(School,self).make_cake() # super().__init__() # super().make_cake() class prentice(School,Master): def __init__(self): self.kongfu = '[独创煎饼果子配方]' def make_cake(self): self.__init__() print(f'运用{self.kongfu}制作煎饼果子') def __print_info(self): print('这个是私有方法') def make_old_cake(self): super().__init__() super().make_cake() xiaoqiu = prentice() xiaoqiu.__print_info() #AttributeError: 'prentice' object has no attribute '__print_info'

    5.获取和修改私有属性值

    5.1获取私有属性写法: get_xx:

    5.1修改私有属性写法: set_xx:

    class prentice(): def __init__(self): self.kongfu = '[独创煎饼果子配方]' self.__money = 2000 def get_money(self): return self.__money def set__money(self): self.__money = 30 class Tusun(prentice): pass xiaoqiu = Tusun() print(xiaoqiu.get_money())#2000 xiaoqiu.set__money() print(xiaoqiu.get_money())#30
    Processed: 0.011, SQL: 9