类的创建, 实例化, 初始化

  • 什么是类

    类就是拥有相同功能或者相同属性的对象集合

  • 类的创建

    • object是所有类的基类

      class GoGamer(object):
          subject = 'go'
      
      print(GoGamer)
  • 类的实例化

    实例就是抽象概念的具象化

    kejie = GoGamer()
    print(kejie)
  • 类的初始化

    类创建一个新实例的时候会默认调用__init__这样一个特殊方法

    class GoGamer(object):
        subject = 'go'
        def __init__(self, obj):
            self.p = obj
    
    kejie = GoGamer("金勺子")
    print(f"柯洁含着{kejie.p}出生")
    • 关于self

      指代还未实例化的实例

面向对象

  • 面向过程

    • 程序=数据结构+算法
    • 强调的是一个实现的细节
  • 面向对象

    完成对越来越庞大项目代码以及对外公开接口的归类和重用, 是一种更高级的抽象.

    • 通过什么手段来完成上述目的?

      • 继承

        class ChineseGoGamer(GoGamer):
            nation = 'cn'
        
        class KoreaGoGamer(GoGamer):
            nation = 'kr'
        • 处理多继承冲突

          • 查看MRO(mehotd resolution order)

            class A:
                def __init__(self):
                    print("init A")
            
            class B:
                def __init__(self):
                    print("init B")
            
            
            class C(A, B):
                pass
            
            print(C.__mro__)
          • 指定类方法的调用顺序

            class C(A, B):
                def __init__(self):
                    super(A, self).__init__()
          • super函数源码

            def super(cls, inst):
                mro = inst.__class__.mro()
                return mro[mro.index(cls) + 1]
            
            def super(类, 实例):
                # 获取当前实例的方法解析顺序
                mro = 实例.类.mro()
                return mro[mro.index(类) + 1]
      • 多态

        方式为覆盖和重载

        • 覆盖(子类和父类之间的, 是垂直的关系)

          子类可以继承父类的所有属性和方法, 但是同时子类也可以重写父类的属性和方法, 达到自定义的目的.

          class A:
              def __init__(self):
                  print("init A")
          
          class B:
              def __init__(self):
                  print("init B")
          
          
          class C(A, B):
              def __init__(self):
                  print("init C")
        • 重载(类中的方法和方法之间的, 是水平关系)

          Python中式没有重载, 但是可以用装饰器来实现该功能.

      • 封装

        把客观事物封装成抽象的类, 隐藏实现细节, 使得代码模块化.

Last modification:September 2, 2022
如果觉得我的文章对你有用,请随意赞赏