Python之初始面向对象
收录于话题
#Python入门
27个
概要:
1.面向对象和面向过程;2.面向对象如何编写;3面向对象和面向过程对比;4.面向对象三大特征
一.面向对象和面向过程:
1.面向过程.,一切以事物的流程为核心,重点在"过程",按照实物的发展流程.,之前的函数或者非函数
优点:简单.流水线式工作
缺点:可扩展性差
2.面向对象.一切以对象为中心,,万事万物皆为对象,(None除外),重点在"对象"的属性和动作.
对象:是一个抽象的概念,具有相同属性和和动作的结合体叫对象
优点:扩展性强(多态,以不同的角度来看)
缺点:编写相对比较复杂.并且上手比较难.
例子1:要把大象装冰箱, 总共分几步? 三步. 第一步. 打开冰箱, 第二步. 装大象, 第三步,关冰箱. 这是一个典型的面向过程的思维方式. 来我们如果换成面向对象呢? 很简单.想 办法造一个会钻冰箱的大象就可以了. 然后命令大象. 进冰箱.大象就乖乖的进冰箱了,具体大象如何进的冰箱由大象来完成.,类似于上帝式的思维),这就是面向对象思维. 我们面向的不再是事物发展的流程, 而是操纵某一个事物的个体. 具体的某一个事物.
总结:面向对象和面向过程各有千秋,各有各的好处.
二.面向对象如何编写.
在代码中定义一个类,就相当于画图纸.
1.语法:
class 类名: #类是对对象的描述,统称,约束.
pass
2.创建对象:
类名() #对象是通过类创建的
3.构造方法:
在python中我们可以是用__init__(self) 函数给对象进行初始化操作. 这个函数(方法)被称为构造函数(方法);
def __init__(self,参数1,参数2,参数3)
#属性的绑定
self.属性1=参数1
self.属性2=参数2
self.属性3= 参数3 #.即'的'的意思
构造方法是创建对象的时候自动调用的
4.方法(写在类中的函数,多个self)
在面向对象编程中的函数和一般函数不一样,有self,多了一个参数,此时不应改叫函数,应该叫方法.
def method(self):
pass
self: 当前正在执行的对象
对象.method()
5.例子:
class Car:
#__init__构造方法,类似于默认值
def __init__(self,color,paizi,pailiang,own):#self表示当前类的对象,当前你创建的是谁,谁来访问这个方法,这个self就是谁
self.color=color
self.paizi = paizi
self.pailiang = pailiang
self.own = own
#print(self)#<__main__.Car object at 0x00000000024CD978>
def run(self,speed):
print("排量为%s的%s的车以%s的速度在飞驰" %(self.pailiang,self.color,speed))#此时的speed不要加self
def tiaogao(self):
print("车牌为%s的车在跳高" %(self.paizi))
car1=Car("红色","冀A12345","2.0T","ALEX")#自动调用__init__方法
#print(type(car1))#<class '__main__.Car'>
#print(car1) #<__main__.Car object at 0x00000000024CD978> 和上面的self结果一致,因为是同一个对象
car1.run(90) #排量为2.0T的红色的车以90的速度在飞驰
car1.color = "黄色"
car1.run(90) #排量为2.0T的黄色的车以90的速度在飞驰
car1.tiaogao()#车牌为冀A12345的车在跳高
car2=Car("黑色","冀A67890","1.5L","Wusir")
car2.run(50) #排量为1.5L的黑色的车以50的速度在飞驰
类与对象的关系: 类是对事物的总结.抽象的概念.类用来描述对象,对象是类的实例化的结果. 对象能执行哪些方法都由类来决定,类中定义了什么,对象就拥有什么.
三.面向对象和面向过程的对比(代码.思想)
面向对象和面向过程到底哪个好? 具体问题具体分析,没有绝对的好和不好,这一点要格外注意.
四.面向对象的三个特征:
封装.继承.多态
1.封装:把具有相同属性和功能的内容封装在一个对象中.
2.继承:子类可以自动拥有父类中除了私有属性外的其他所有内容.
在python中实现继承非常简单,在声明类的时候,在类名后面添加一个小括号, 就可以完成继承关系,这样写的好处是我们可以避免写很多重复的功能和代码;一个子类可以继承多个父类,是有顺序的,看例子.
例子:
class QinDie:
def chi(self):
print("亲爹给你买吃的")
def play(self):
print("亲爹陪你玩")
class GanDie:
def le(self):
print("干爹让你乐呵呵")
def chi(self):
print("干爹给你买吃的")
class GuNiang(QinDie,GanDie): #谁在前,先继承谁的,反过来的话,就先继承干爹的了
def he(self):
print("没有人陪我,自己喝酒")
# def chi(self):
# print("没人陪我,自己吃肉") #假如自己有父类的函数,执行自己的
gubumei =GuNiang()
gubumei.chi() #继承亲爹的,结果为亲爹给你买吃的
gubumei.le()#亲爹没有,继承干爹的,结果为干爹让你乐呵呵
3.多态:同一个对象.可以拥有多种形态. python原生自带多态性.
程序具有程序具有超高的可扩展性.面向对象思想的核心与灵魂.
例子:
class Animal:
def chi(self):
print("动物都知道吃")
class Pig(Animal):
def chi(self):
print("猪也知道吃")
class Dog(Animal):
def chi(self):
print("狗也知道吃")
class Cat(Animal):
def chi(self):
print("猫也知道吃")
class SiYangYuan:
def Yang_animal(self,ani):#多态性,超强的可扩展性,无论传递进来的是什么,都统一当做动物来对待
ani.chi()
cat = Cat()
dog=Dog()
alex = SiYangYuan()
alex.Yang_animal(cat) #猫也知道吃态
alex.Yang_animal(dog)#狗也知道吃