python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)

一、什么面向对象和面向过程?

面向对象:--谁来做?
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
1.在完成某一个需求前,首先确定职责--要做的事(方法)
2.根据职责确定不同的对象,在对象内部封装不同的方法(多个)
3.最后完成代码,就是顺序的让不同的对象调用不同的方法
特点:
1.注重对象和职责,不同的对象承担不同的职责
2.更加适合对复杂的需求变化,是专门应对复杂项目的开发,提供的固定套路
3.需要在面向过程的基础上,再学习一些面向对象的语法
主要是针对的是一个对象,将所有的功能封装成一个对象,让对
象去实现具体的细节,这就好比,我们想要吃一个蛋糕,将制作蛋糕的原材
料封装后交给蛋糕房,让蛋糕房来生产蛋糕。
优点:解决了程序的扩展性,对某一个信息的修改比较容易,然后反映到这
个体系中。
缺点:可控性差,面向对象的程序一旦开始就由对象之间的交互解决问题,无法预测最终结果。

面向过程:侧重于怎么做?
1.把完成某一个需求的 所有步骤 从头到尾 逐步实现
2.根据开发要求,将某些功能独立的代码封装成一个又一个函数
3.最后完成的代码,就是顺序的调用不同的函数
特点:
1.注重步骤与过程,不注重职责分工
2.如果需求复杂,代码会变得很复杂
3.开发复杂项目,没有固定的套路,开发难度很大
主要针对的是一个过程,将程序分为具体的步骤,哪个步骤该执
行什么样的事情,在这个步骤里应该注意哪个细节。例如,我们拿到制作蛋
糕的原材料时自己按着流水线的步骤来做,一旦其中一个步骤出现错误,那
么就无法完成。
优点:极大的降低了程序的复杂性
缺点:可用性差,一个流水线或者流程只能解决一个问题。

二、类的建立及对象的创建

1、创建一个类时候,需要满足的三个要求
(1)、类名:这类事物的总称,满足大驼峰命名方法
(2)、属性:这类事物具有的特征
(3)、这类事物具有什么样的行为

例子1、简单的类和对象定义

面向对象的基础用法:
1.基本类的定义
class 类名:
def 方法1(self,参数列表):
pass
def 方法2(self,参数列表):
pass
2.当一个类定义完成之后,要使用这个类来创建对象
语法格式如下:
对象变量 = 类名()
对象变量.方法1()
对象变量.方法2()

实例

在日常开发中,不推荐在类的外部给对象增加属性
如果在运行时,没有找到属性,程序会报错
这里写图片描述
结果证明
这里写图片描述

例子2:地址id

在python中,一切皆为对象,每个对象会产生三个属性,id,数值(value),类型type
这里需要注意的是地址相同时,数值一定相同,而地址不同时,数值可相同,也可不同
这里写图片描述

例子3:一个类中定义两个对象,两个对象的地址不同,若将对象传递给另一个对象时,地址仍然保持不变

这里写图片描述
结果证明
这里写图片描述

三、方法

1、初始化方法

我们现在已经知道了使用 类名() 就可以创建一个对象
当使用类名()创建对象时,python的解释器会自动执行以下操作:
1.为对象在内存中分配空间–创建对象
2.调用初始化方法为对象的属性设置初始值–初始化方法(init)
这个初始化方法就是init方法,init是对象的内置方法
init方法是专门用来定义一个类具有哪些属性的方法
class Cat():
def init(self):
print ‘这是一个初始化方法’
# self.属性名 = 属性的初始值
self.name = ‘Tom’
#print ‘hello’

使用 类名() 创建对象的时候,会自动调用初始化方法 init
tom = Cat()
print tom.name

例子

这里写图片描述
1、改造初始化方法–初始化的同时设置初始值:
在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对init方法进行改造
1.把希望设置的属性值,定义成init方法的参数
2.在方法内部使用self.属性名 = 形参 接收外部传递的参数
3.在创建对象时,使用类名(属性1,属性2..)调用

2、在初始化方法的内部定义属性
init方法内部使用self.属性名 = 属性的初始值 就可以定义

2、del方法(内置方法)

当删除一个对象时,python解释器会默认调用一个方法,这个方法为_ del _ ()方法。当一个对象被从内存中销毁前,会被自动调用_del方法Python的内存管理机制能够很好的胜任这份工作。也就是说,不管是手动调用 del 还是由 python自动回收都会触发 del _ 方法执行:

实例

这里写图片描述
结果显示
当我们创建完对象时,会被自动调用,删除对象时,del方法会被调用,若不删除对象,那么会先执行其他的命令,在调用del方法
这里写图片描述

3、str方法(内置方法)

在python中,使用python输出对象变量,默认情况下,会输出这个变量引用的对象,由哪一个类创建的对象,以及内存中的地址(十六进制),如果在开发中,希望使用print 输出对象变量时,能够打印自定义的内容,就可以使用str这个内置方法了

实例:

这里写图片描述
结果证明
这里写图片描述

4、类的属性和方法(类属性,类方法,私有属性,私有方法,静态方法)

类的结构

实例:
1.使用面向对象开发,第一步是设计类
2.使用 类名() 创建对象,创建对象的动作有两步
1.在内存中为对象分配空间
2.调用初始化方法init_ 为对象初始化
3.对象创建后,内存中就有了一个对象的实实在在的存在–实例

因此:
1.创建出来的对象叫做类的实例
2.创建对象的动作叫做实例化
3.对象的属性叫做实例属性
4.对象调用的方法叫做实例方法

在程序执行时:
1.对象各自拥有自己的实例属性
2.调用对象的方法,可以通过self
访问自己的属性
调用自己的方法
结论:
1.每一个对象都有自己独立的内存空间,保存各自不同的属性
2.多个对象的方法,在内存中之有一份,在调用方法时,需要把对象的引用传递到方法内部

实例1

类是一个特殊的对象
Python中一切皆对象
class AAA: 定义的类属性属于类对象
obj1 =AAA: 属于实例对象
在运行程序时,类 同样会被加载到内存
在python中,类 是一个特殊的对象–类对象

除了封装 实例(对象) 的属性和方法外,类对象还可以有自己的属性和方法

通过 类名. 的方式可以直接访问类的属性或者调用类的方法
这里写图片描述
结果显示
这里写图片描述

实例2

类属性就是针对类对象定义的属性
使用赋值语句在class关键字下方可以定义类属性
类属性用于记录于这个类相关的特性

类方法就是针对类对象定义的方法
在类方法内部就可以直接访问类属性或者调用其他类方法
语法如下:
@classmethod
def 类方法(cls):
pass
这里写图片描述
这里写图片描述
结果显示
这里写图片描述

实例3

静态方法
在开发时,如果需要在类中封装一个方法,这个方法:
既不需要访问实例属性或者调用实例方法
也不需要访问类属性或者调用类方法
这个时候可以把这个方法封装成一个静态方法

语法如下:
@staticmethod
def 静态方法():
pass
静态方法需要修饰器@staticmethod来标识,告诉解释器这是一个静态方法
通过类名,调用静态方法
这里写图片描述
结果显示
这里写图片描述

实例4:综合应用

1.设计一个Game类
2.属性
类属性,记录游戏的历史最高分(与这个游戏类有关系,与每次游戏无关)
实例属性,记录当前游戏玩家的玩家姓名
3.方法:
静态方法:方法show_help显示游戏帮助信息
类方法:方法show_top_score显示历史最高分
实例方法:方法start_game开始当前玩家的游戏

4.主程序步骤
1.查看帮助信息
2.查看历史最高分
3.创建游戏对象,开始游戏
这里写图片描述
这里写图片描述
结果显示
这里写图片描述

实例5:私有属性和方法

在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属

父类的私有属性和私有方法
1.子类对象不能在自己的方法内部,直接访问父亲的私有属性和私有方法
2.子类对象可以通过父类的公有方法间接访问到私有属性和私有方法
私有属性,私有方法是对象的隐私,不对外公开,外界和子类不能直接访问
私有属性,私有方法常用做一些内部的事情
这里写图片描述
这里写图片描述
结果显示
这里写图片描述
想要对私有方法进行调用,可以在类中定义公有方法,通过公有方法间接调用私有方法

四、新式类和旧式类

Python中类分两种:旧式类和新式类:
新式类,旧式类(经典类)
新式类 定义时给类后加上(object)
class A(object)
pass
python 3 以后若是未指定继承自object 会默认继承自 object 类
python 3 以前则不会,需要进行指定,
可通过 dir()函数,来查看经典类多继承搜索顺序(深度优先):

注:新式类旧式类最明显的区别在于继承搜索的顺序发生了改变
即:
经典类多继承搜索顺序(深度优先):
先深入继承树左侧查找,然后再返回,开始查找右侧
新式类多继承搜索顺序(广度优先):
先在水平方向查找,然后再向上查找。
此种区别会在面向对象特点——继承中介绍到

实例1

这里写图片描述
结果显示
这里写图片描述

实例2、 new()方法

_ new _ ()方法是在类准备将自身实例化时调用。
_ new _ ()方法始终都是类的静态方法,即使没有被加上静态方法装饰器。
第一种例子
这里写图片描述
结果显示
这里写图片描述
第二个例子
这里写图片描述
这里写图片描述
结果显示
这里写图片描述

猜你喜欢

转载自blog.csdn.net/dhjibk/article/details/81174079