一、面向过程和面向对象
1、面向过程
以我为中心,做一件事先干什么,在干什么,后干什么,有一套清楚完整的流程。核心是“过程”。
优点:将要解决的问题流程化, 编写相对简单
缺点:可扩展性差
2、面向对象
以对象为中心,做一件事不需要你清楚怎么做,你创建能做这件事的对象即可。对象是具体的事物,它能实现一定的功能。
优点:可扩展性强
缺点:编程的复杂度高于面向过程
二、面向对象如何编写
在现实世界中,是先有对象,然后后归类;在代码中,是先定义类,然后再创建对象
#定义类 格式:
class 类名:
def __init__(self,参数): #这是类的构造方法,在创建对象的时候会自动执行;self指当前正在创建的对象,由python自动传值
pass
def 方法名(self,参数): #类中自定义的方法
pass
#创建对象:
变量 = 类名(参数)
# 访问对象的属性信息
对象.属性
# 方法的访问:
对象.方法()
#定义computer类
class Computer:
def __init__(self,pinpai,cpu):
self.pinpai = pinpai
self.cpu = cpu def playgame(self,game):
print("使用%s电脑打%s游戏" % (self.pinpai, game))
#创建具体对象c
c = Computer("lenovo", "A8")
print(c.pinpai)
c.playgame("lol") #创建对象c2
c2 = Computer("xiaomi", "i7")
print(c2.pinpai)
c2.playgame("吃鸡")
!!!注意:
对类与对象关系的理解: 类通过实例化创建一个对象,每个对象都是独立的。
点 . 可以理解为“的”,或者“调用” 比如 c.pinpai 就是对象c的品牌;c.playgame() 对象c调用playgame方法
三、面向对象和面向过程大PK
那么面向对象和面向过程到底哪个好?
具体问题,具体分析。 没有绝对的好和不好。 这点 要格外注意。
对于大型项目,更适合用面向对象;对于小型脚本,更适合用面向过程
四、面向对象三大特征
(一)封装
封装是一个很宽泛的概念,你写一个函数,可以称为封装,对象,打包成模块也都属于封装的思想。
在面向对象思想中,把一些看似无关紧要的内容组合到一起统一进行存储和使用,这就是封装。
对属性封装
self.xxx = xxxx
对方法封装
def 方法名():
pass
(二)继承
继承格式
class 子类名(父类1,父类2):
pass
子类可以自动拥有父类中除了私有内容外的其他所有内容
(三)多态
同一个对象多种形态
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): #本来这里的参数要的是Animal类的对象,但是传入Pig类,Haski类,Alasika类的对象也可以,这就是多态
ani.chi() zhu = Pig()
erha = Haski()
ala = Alasika()
alex = SiYangYuan()
alex.yanng_animal(zhu)
alex.yanng_animal(erha)
alex.yanng_animal(ala)
多态的好处:
程序具有超高的可扩展性。
面向对象思想的核心与灵魂。
python自带多态,我们一直在用多态,但是感觉并不明显。 比如. 我们创建一个变量a = 10 , 我们知道此时a是整数类型。但是我们可以通过程序让a = "alex", 这时, a又变成了字符串类型。