今日主要内容
1. 面向对象和面向过程
面向过程: 以我为中心. 按照事物的发展"流程".
优点:流程化,编写简单 缺点: 可拓展性差
面向对象: 以对象为中心. 具有相同属性和动作的结合体叫对象
优点: 可拓展性强 缺点: 编程复杂度高于面向过程
万事万物皆为对象(object)
2. 如何编写面向对象的程序(重点)
先创建类: 归类. 对某些事物进行总结. 相当于图纸
使用类可以创建对象:
class 类名(object) (类名首字母大写)
def __init__(self, name, age): # 构造方法. 创建对象的时候自动调用这个方法
self.name = name
self.age = age
def 方法名(self, 参数);
方法体(return)
创建对象:实例化
变量(引用, 句柄) = 类名(参数)
# 访问对象的属性信息
对象.属性 print(c.self)
# 方法的访问:
对象.方法() c.func()
对比面向对象和面向过程:
看需求.
大型项目更适合用面向对象
小型脚本程序更适合面向过程
3. 面向对象的三大特征: 封装, 继承, 多态
1. 封装
对属性封装
self.xxx = xxxx
对方法封装
def xxx(self)
2. 继承
子类可以自动拥有父类中除了私有内容外的其他所有内容
单继承:
class Niu: def da(self): print("牛魔王打架很厉害") class HongHaiEer(Niu) # 单继承 def da(self): print("喷火") hhl = HongHaiEer() hhl.da() 子类在父类的基础上扩展了一些功能是派生
多继承:
class Foo1: def money(self): print("有钱") class Foo2: def play(self): print("玩儿") def money(self): print("没钱") class Bar(Foo2, Foo1): # MRO c3算法 pass b = Bar() b.money()
3. 多态
同一个对象多种形态.
class YaoGuai: def teng(self): print("妖怪一定疼") class Zhizhujing(YaoGuai): def teng(self): print("蜘蛛精很痛") class Heixiongjing(YaoGuai): def teng(self): print("黑熊精很痛") class Baigujing(YaoGuai): def teng(self): print("白骨精很疼") class Jinjiaodawang(YaoGuai): def tebieteng(self): #子类可以继承父类的方法 print("爆炸的疼") class Sunwukong: def da(self, yg): yg.teng() swk = Sunwukong() hxj = Heixiongjing() swk.da(hxj) #黑熊精很痛 bgj = Baigujing() swk.da(bgj) #白骨精很疼 zzj = Zhizhujing() swk.da(zzj) #蜘蛛精很痛 alex = Jinjiaodawang() swk.da(alex) #妖怪一定疼 调用父类的方法