一、面向对象和面向过程
1.面向过程:一切以事物的流程为核心,核心是“过程”二字(流水线),是一种机械式的编程思维
优点:负责的问题流程化,编写相对简单
缺点:可扩展性差
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方法的第一个参数位置.
总结: 类与对象的关系: 类是对事物的总结. 抽象的概念. 类用来描述对象. 对象是类的实例
化的结果. 对象能执行哪些方法. 都由类来决定. 类中定义了什么. 对象就拥有什么
对比面向对象和面向过程:
看需求
大型项目更适合用面向对象
小型脚本程序更适合面向过程
三、面向对象的三大特征
面向对象三大特征:封装,继承,多态,只要是面向对象编程语言,都有这三个特征
1.封装
对属性封装:self.xxx = xxxx
对方法封装
2.继承
子类可以自动拥有父亲中除了私有内容外的其他所有内容
class Yao: def chi(self): print("我是妖怪, 我天生就会吃人") class BaiGuJing(Yao): # 白骨精继承妖怪 pass bgj = BaiGuJing() bgj.chi() # 我是妖怪, 我天生就会吃人 # 虽然白骨精类中没有编写chi. 但是他爹有啊. 直接拿来用
多继承
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.多态
同一个对象对重形态
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)