类的创建, 实例化, 初始化
什么是类
类就是拥有相同功能或者相同属性的对象集合
类的创建
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中式没有重载, 但是可以用装饰器来实现该功能.
封装
把客观事物封装成抽象的类, 隐藏实现细节, 使得代码模块化.
Comment here is closed