今日主要内容
1. 面向对象和面向过程(重点在于理解)
面向过程: 以我为中心. 按照事物的发展"流程".
优点:负责的问题流程化,编写相对简单
缺点:可拓展性差
面向对象: 以对象为中心.
优点: 可拓展性强
缺点: 编程的复杂度高于面向过程
万事万物皆为对象(object)
2. 如何编写面向对象的程序(重点)
先创建类: 归类. 对某些事物进行总结. 相当于图纸
使用类可以创建对象:
class 类名(object)
def __init__(self, name, age): # 构造方法. 创建对象的时候自动调用这个方法
self.name = name
self.age = age
def 方法名(self, 参数);
方法体(return)
创建对象:
变量(引用, 句柄) = 类名(参数)
# 访问对象的属性信息
对象.属性
# 方法的访问:
对象.方法()
例 class Car:
def __init__(self, color, pai, pailiang): # self表示当前类的对象. 当前你创建
的是谁, 谁来访问的这个⽅法.那这个self就是谁.
self.color = color
self.pai = pai
self.pailiang = pailiang
def run(self, speed):
print("⻋可以跑%s迈" % speed)
c = Car("red", "京A66666", "2.0T")
c.run(100) # 这时. python会⾃动把对象c传递给run⽅法的第⼀个参数位置.
对比面向对象和面向过程:
看需求.
大型项目更适合用面向对象
小型脚本程序更适合面向过程
3. 面向对象的三大特征: 封装, 继承, 多态
1. 封装
对属性封装
self.xxx = xxxx
对方法封装
2. 继承
子类可以自动拥有父类中除了私有内容外的其他所有内容
例 class QinDie:
def chi(self):
print("亲爹给你好吃的")
def play(self):
print("亲爹会陪你玩")
class GanDie:
def qian(self):
print("⼲爹给钱啊")
def play(self):
print("⼲爹会陪你玩")
class GuNiang(QinDie, GanDie):
pass
bumei = GuNiang()
bumei.chi() # 亲爹
bumei.qian() # 亲爹没有, 找⼲爹
bumei.play() # 亲爹有了, 就不找⼲爹了
3. 多态
同一个对象多种形态.
程序具有超高的可扩展性. ⾯向对象思想的核⼼与灵魂. python⾃带多态
例 class Animal:
def chi(self):
print("动物就知道吃")
class Pig(Animal):
def chi(self):
print("猪在吃")
class Haski(Animal):
def chi(self):
print("哈⼠奇在吃")
class Alasika(Animal):
def chi(self):
print("阿拉斯加在吃")
class SiYangYuan:
def yanng_animal(self, ani):
ani.chi()
zhu = Pig()
erha = Haski()
ala = Alasika()
alex = SiYangYuan()
alex.yanng_animal(zhu)
alex.yanng_animal(erha)
alex.yanng_animal(ala)