python 面向对象编程

面向对象介绍

面向对象 vs 面向过程

  • 面向对象:适合解决不确定性的事物
  • 面向过程:适合解决已经已知的、确定的事物

面向对象传递的是数据和行为的封装,面向过程传递的是数据

面向对象的核心特征

  1. 封装:隐藏了对象的实现细节,可以通过接口访问
  2. 继承:继承另外一个类获得行为和属性
  3. 多态:一个类有多种形态
  4. 聚合/组合:一个类中包含有另一个类
  5. 接口/实现:接口,描述一个类的用户如何和这个类交互,实现,完成接口所定义的功能
  6. 抽象:将对象的属性和行为抽象出来

模块导入

当需要导入一个全局的类时,其他模块导入的这个类时时候,便会执行

database.py

class DB:
    pass

db = DB()

process.py

from database import db

如上面的代码,在process文件里导入db的时候,db就会执行实例化,有时候,我们需要db在所有的程序都准备好后,在实例化

我们可以通过写一个初始化方法,需要实例化时,在执行初始化方法

database.py

class DB:
    pass

db = None

def init_process():
    global db
    db = DB()

process.py

from database import db, init_process

# 需要执行的时候
init_process()

类变量

定义在python类里面,供所有类使用的变量为类变量

class MyClass:
    a = [] # a为一个类变量

上面的a为一个类变量,所有通过此类实例化的对象,都共享此变量

first = MyClass()
second = MyClass()
first.a.append(1)
second.a.append(2)

经过上面的操作后,a的值为[1,2]

这个类变量在子类里面,可以通过self.a 的形式访问

但如果,在子类里面对self.a 进行赋值,则会在子类里面创建一个新的实例变量,通过self.a 访问到的则是在子类里面创建的实例变量

若要访问类变量,可以使用MyClass.a来访问