目录

一.面向对象的三大特性
面向对象编程,是许多编程语言都支持的一种编程思想。
 简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。
面向对象包含3大主要特性:
- 封装
- 继承
- 多态
私有成员
现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。
类中提供了私有成员的形式来支持。
- 私有成员变量
- 私有成员方法
定义私有成员的方式非常简单,只需要:
- 私有成员变量:变量名以_ _开头(2个下划线)
- 私有成员方法:方法名以_ _开头(2个下划线)
即可完成私有成员的设置
私有方法无法直接被类对象使用、私有变量无法赋值,也无法获取值
演示
  
   - 
    
     
    
    
     
      class 
      Phone:
     
    
- 
    
     
    
    
         
      id=
      None
     
    
- 
    
     
    
    
     
          produce=
      None
     
    
- 
    
     
    
    
     
          __current_voltage=
      None
      #当前电压
     
    
- 
    
     
    
    
         
      def 
      call_by_5g(
      self):
     
    
- 
    
     
    
    
             
      print(
      "5g已经开启")
     
    
- 
    
     
    
    
         
      def 
      __keep_single_core(
      self):
     
    
- 
    
     
    
    
             
      print(
      "开启节电模式")
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      phone=Phone()
     
    
- 
    
     
    
    
     
      phone.call_by_5g()
     
    
- 
    
     
    
    
     
      phone.__keep_single_core
     
    
结果是

使用私有成员
私有成员无法被类对象使用,但是可以被其它的成员使用。
演示
  
   - 
    
     
    
    
     
      class 
      Phone:
     
    
- 
    
     
    
    
         
      id=
      None
     
    
- 
    
     
    
    
     
          produce=
      None
     
    
- 
    
     
    
    
     
          __current_voltage=
      0.5
      #当前电压
     
    
- 
    
     
    
    
         
      def 
      __keep_single_core(
      self):
     
    
- 
    
     
    
    
             
      print(
      "开启节电模式")
     
    
- 
    
     
    
    
         
      def 
      call_by_5g(
      self):
     
    
- 
    
     
    
    
             
      if(self.__current_voltage>=
      1):
     
    
- 
    
     
    
    
                 
      print(
      "5g已经开启")
     
    
- 
    
     
    
    
             
      else:
     
    
- 
    
     
    
    
                 
      print(
      "电量不足")
     
    
- 
    
     
    
    
     
                  self.__keep_single_core()
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      phone=Phone()
     
    
- 
    
     
    
    
     
      phone.call_by_5g()
     
    
结果是

封装小结
1.封装的概念是指?
 将现实世界事物在类中描述为属性和方法,即为封装。
2.什么是私有成员?为什么需要私有成员?
 现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时候也需要达到这个要求,就需要定义私有成员了
3.如何定义私有成员?
 成员变量和成员方法的命名均以_ _作为开头即可
4.私有成员的访问限制?
 类对象无法访问私有成员
 类中的其它成员可以访问私有成员
二.继承
继承就是一个类,继承另外一个类的成员变量和成员方法
 语法:

比如说,下图从左到右


 构建Phone2022类,你会选择
 1.从头写一个新的类
 2.基于已有的Phone类进行修改
我们可以使用继承来完成此需求
 
 继承分为︰单继承和多继承
 使用如图语法,可以完成类的单继承。
 继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)
演示
  
   - 
    
     
    
    
     
      class 
      Phone:
     
    
- 
    
     
    
    
         
      id=
      345
     
    
- 
    
     
    
    
     
          produce=
      "huawei"
     
    
- 
    
     
    
    
     
          __current_voltage=
      0.5
      #当前电压
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      class 
      Phone2022(
      Phone):
     
    
- 
    
     
    
    
         
      pass
     
    
- 
    
     
    
    
     
      phone=Phone2022()
     
    
- 
    
     
    
    
     
      print(phone.
      id)
     
    
- 
    
     
    
    
     
      print(phone.produce)
     
    
- 
    
     
    
    
     
      print(phone.__current_voltage)
     
    
结果是

如图,私有成员无法继承
pass关键字
这pass关键字就是用来去补全语法的,pass本身表示这里是空的,只是让我们的语法不产生错误
多继承
Python的类之间也支持多继承,即一个类,可以继承多个父类 演示
演示
演示
  
   - 
    
     
    
    
     
      class 
      Phone:
     
    
- 
    
     
    
    
     
          id=
      345
     
    
- 
    
     
    
    
     
          produce=
      "huawei"
     
    
- 
    
     
    
    
         
      def 
      call_by_5g(
      self):
     
    
- 
    
     
    
    
     
              print(
      "5g通话")
     
    
- 
    
     
    
    
     
      class 
      NFCReader:
     
    
- 
    
     
    
    
     
          nfc_type=
      "第五代"
     
    
- 
    
     
    
    
     
          produce=
      "HW"
     
    
- 
    
     
    
    
         
      def 
      read_card(
      self):
     
    
- 
    
     
    
    
     
              print(
      "读取NFC")
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         
      def 
      write_card(
      self):
     
    
- 
    
     
    
    
     
              print(
      "写入NFC")
     
    
- 
    
     
    
    
     
      class 
      RemoteControl:
     
    
- 
    
     
    
    
     
          rc_type=
      "红外遥控"
     
    
- 
    
     
    
    
         
      def 
      control(
      self):
     
    
- 
    
     
    
    
     
              print(
      "红外遥控开启")
     
    
- 
    
     
    
    
     
      class myphone(Phone,NFCReader,RemoteControl):
     
    
- 
    
     
    
    
     
          pass
     
    
- 
    
     
    
    
     
      phone=myphone()
     
    
- 
    
     
    
    
     
      phone.call_by_5g()
     
    
- 
    
     
    
    
     
      phone.read_card()
     
    
- 
    
     
    
    
     
      phone.write_card()
     
    
- 
    
     
    
    
     
      phone.control()
     
    
结果是

多继承注意事项
多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。即:先继承的保留,后继承的被覆盖

小结
1.什么是继承?
 继承就是一个类,继承另外一个类的成员变量和成员方法
 语法:
子类构建的类对象,可以
- 有自己的成员变量和成员方法
- 使用父类的成员变量和成员方法
2.单继承和多继承
 单继承:一个类继承另一个类
 多继承:一个类继承多个类,按照顺序从左向右依次继承
 多继承中,如果父类有同名方法或属性,先继承的优先级高于后继承
3.pass关键字的作用是什么
 pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思
三.复写和使用父类成员
子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。即:在子类中重新定义同名的属性或方法即可。
复写父类成员的语法
演示
  
   - 
    
     
    
    
     
      class 
      Phone:
     
    
- 
    
     
    
    
         
      id=
      345
     
    
- 
    
     
    
    
     
          produce=
      "huawei"
     
    
- 
    
     
    
    
         
      def 
      call_by_5g(
      self):
     
    
- 
    
     
    
    
             
      print(
      "5g通话")
     
    
- 
    
     
    
    
     
      class 
      myphone(
      Phone):
     
    
- 
    
     
    
    
     
          produce = 
      "hw"
      #复写父类的成员属性
     
    
- 
    
     
    
    
         
      def 
      call_by_5g(
      self):
      #复写父类成员方法
     
    
- 
    
     
    
    
             
      print(
      "4g通话")
     
    
- 
    
     
    
    
     
      phone=myphone()
     
    
- 
    
     
    
    
     
      print(phone.produce)
     
    
- 
    
     
    
    
     
      phone.call_by_5g()
     
    
结果是

 但是呢我父类的这个东西呢我还想要
 那么就需要
调用父类同名成员
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
 如果需要使用被复写的父类的成员,需要特殊的调用方式:
法一:
 调用父类成员
 使用成员变量:父类名.成员变量
 使用成员方法:父类名.成员方法(self)
法二:
 使用super()调用父类成员
 使用成员变量: super().成员变量
 使用成员方法:super().成员方法()
演示
  
   - 
    
     
    
    
     
      class 
      Phone:
     
    
- 
    
     
    
    
         
      id=
      345
     
    
- 
    
     
    
    
     
          produce=
      "huawei"
     
    
- 
    
     
    
    
         
      def 
      call_by_5g(
      self):
     
    
- 
    
     
    
    
             
      print(
      "5g通话")
     
    
- 
    
     
    
    
     
      class 
      myphone(
      Phone):
     
    
- 
    
     
    
    
     
          produce = 
      "hw"
      #复写父类的成员属性
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
         
      def 
      call_by_5g(
      self):
      #复写父类成员方法
     
    
- 
    
     
    
    
             
      # 方法一
     
    
- 
    
     
    
    
             
      print(
      f"父类的品牌是{Phone.produce}")
     
    
- 
    
     
    
    
     
              Phone.call_by_5g(self)
     
    
- 
    
     
    
    
             
      #方法二
     
    
- 
    
     
    
    
             
      print(
      f"父类的品牌是{super().produce}")
     
    
- 
    
     
    
    
             
      super().call_by_5g()
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
     
      phone=myphone()
     
    
- 
    
     
    
    
     
      print(phone.produce)
     
    
- 
    
     
    
    
     
      phone.call_by_5g()
     
    
结果是

小结
1.复写表示:
 对父类的成员属性或成员方法进行重新定义
 2.复写的语法:
 在子类中重新实现同名成员方法或成员属性即可
 3.在子类中,如何调用父类成员
 方式1:
 调用父类成员
 使用成员变量:父类名.成员变量
 使用成员方法:父类名.成员方法(self)
方式2:
 使用super()调用父类成员
 使用成员变量: super().成员变量
 使用成员方法: super().成员方法()
注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是
 调用子类复写的

转载:https://blog.csdn.net/weixin_63318044/article/details/128506538
