python入门教程NO.9 怎么理解面向对象编程?看我就够了!
2020-04-21 本文已影响0人
python攻城狮
python入门教程
python入门教程NO.9 怎么理解面向对象编程?看我就够了!
面向对象编程简称:OOP,是object oriented programming的缩写,它是一种python的编程思想。
- 面向过程----就是我们一开始学习的,按照解决问题的步骤去写代码,这就是面向过程
- 面向对象----程序设计的核心是对象,常用于解决一类问题,是一条精心设计的生产线
到底什么是面向对象?
- 相信很多人看了上面的对于
面向对象编程
的解释,脑海中并没有产生形象的记忆,看了无数关于面向对象编程
的解释,全是干巴巴的名词,完全搞不懂啊,感觉要奔溃了! - 这时,你看到了这篇文章,那么看我怎么给你解释
什么叫面向对象的编程
,接着往下看,看完还不懂你顺着网线来打我~
首先咱们来说一下面向对象的几个术语:
-
类
:对具有相同数据或者方法的一组对象的集合 -
类属性
:属于一个类中所有对象的属性, -
类方法
:那些无须特定的对象实例就能够工作的从属于类的函数。 -
对象
:对象是一个类的具体实例 -
实例化
:创建对象
的动作
叫做实例化
-
继承
:子项继承父项的某些功能,在程序中表现某种联系 -
方法重写:
:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 -
封装
:把需要用的函数或者功能封装,方便其他程序直接调用 -
标识
:每个对象的事例都需要一个可以唯一标识这个事例的标记 -
实例属性
:对象的属性叫做实例属性 -
实例方法
:对象调用的方法叫做实例方法
相信很多人看过一个美国大片---《复仇者联盟》,复仇者联盟是由:钢铁侠、美国队长、雷神、绿巨人、黑寡妇、鹰眼、洛基、尼克等超级英雄组成的一个护卫地球的超级联盟。
那么让我们用复仇者联盟来理解一下面向对象编程的术语:
-
类
:钢铁侠、美国队长、雷神、绿巨人、黑寡妇、鹰眼...等等组成了复仇者联盟,复仇者联盟就成为了一个超级英雄的集合,他们都拥有超能力。
class Fulian: #用class定义了一个名为‘Fulian’的类,记得加上英文:
-
类属性
:复仇者联盟的成员都是人型,拥有一个脑袋、两只手、两只眼睛、一张嘴,这些共同的属性就构成了类的属性
class Fulian:
def __init__(self, name, hair_color): #类的构造方法函数,用于初始化类的内部状态,为类的属性设置默认值
self.name = name #定义 name 属性(名字)
self.hair_color = hair_color #定义 hair_color 属性(头发颜色)
-
类方法
:复仇者联盟有一艘飞船,这个飞船无需复仇者联盟的任何人操作,它可以自动飞行,它属于复仇者联盟下面的一个武器,是一种功能
class Fulian:
def __init__(self, name, hair_color): #类的构造函数,用于初始化类的内部状态,为类的属性设置默认值
self.name = name #定义 name 属性(名字)
self.hair_color = hair_color #定义 hair_color 属性(头发颜色)
def airship(self): #定义一个函数,为类的函数,称为方法;它至少有一个参数 self(飞船)
print('{}正在驾驶飞船'.format(self.name))
-
实例化
:比如我们描述一个拥有绿色皮肤
,力大无穷
,会变大
,容易愤怒
等等特点的超级英雄,我们把这些特征结合在一起,很明显就让大家知道这是说的绿巨人
,这就是绿巨人这个对象实例化的过程
。
fulian = Fulian('美国队长', '金色头发') #传入 name 和 hair_color 参数,实例化对象
-
对象
:美国队长
作为复仇者联盟一员,他是复仇者联盟的一个具体事例
,他是一个独一无二的超级英雄,并且归属于复仇者联盟
class Fulian:
def __init__(self, name, hair_color): #类的构造函数,用于初始化类的内部状态,为类的属性设置默认值
self.name = name #定义 name 属性(名字)
self.hair_color = hair_color #定义 hair_color 属性(头发颜色)
def airship(self): #定义一个函数,为类的函数,称为方法;它至少有一个参数 self(飞船)
print('{}有着{},他正在驾驶飞船'.format(self.name, self.hair_color)) #调用类的属性
fulian = Fulian('美国队长', '金色头发') #传入 name 和 hair_color 参数,实例化对象
fulian.airship() #实例对象 fulian 调用类的方法 airship
#输出:美国队长有着金色头发,他正在驾驶飞船
-
继承
:继承很好理解,假如绿巨人
生了个儿子
叫小浩,跟浩克一样会变大、变绿、力大无穷
,那么无疑,是浩克的亲儿子,因为小浩继承了浩克的能力
class Hulk: #定义一个绿巨人类,用变量赋值的方式给类加上属性
skin = 'green' #皮肤属性
body = 'tall' #身高属性
class Son(Hulk): #定义绿巨人的儿子类,括号里填上父类名,继承父类的属性和方法
pass
son = Son()
print(son.skin) #输出:green
-
方法重写
:绿巨人的儿子小浩说不喜欢身上的绿色,于是他改变了基因,去掉了绿色
class Hulk: #定义一个绿巨人类,用变量赋值的方式给类加上属性
skin = 'green' #皮肤属性
body = 'tall' #身高属性
class Son(Hulk): #定义绿巨人的儿子类,括号里填上父类名,继承父类的属性和方法
skin = 'white' #改变基因,变回白色皮肤
son = Son() #类的实例化
print(son.skin) #输出:white
-
封装
:比如,我们把复仇者联盟的使用的武器存放到一个武器库里面,需要的时候直接从武器库调用武器,这就是一个封装的过程
class Arms:
def __init__(self, name, sort, func):
self._name = name #通过在变量前加一个下划线来封装属性, 例如:self._name=name
self._sort = sort
self._func = func
def fun(self):
print('{}属于{}武器,它可以{}' .format(self._name, self._sort, self._func))
arms = Arms('雷神之锤' , '锤类' ,'发出闪电')
arms.fun()
#输出:雷神之锤属于锤类武器,它可发出闪电
-
标识
:每个超级英雄都有自己独特的超能力或者武器,比如美队的盾牌就标识了他的身份 -
实例属性
:妇联的各位都是独一无二的,比如绿巨人的绿
,雷神的闪电
等等,都是他们的属性之一 -
实例方法
:雷神可以使用锤法
,美队可以使用盾法
、绿巨人扔车
,他们每个人使用的方法都是实例方法
在python中,用变量表示属性,用函数表示方法,因此具有相同属性和方法的一类事物就是‘类’,对象就是这这类事物中具体的一个。