欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-07 21:46:03
...

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

面向对象:--谁来做?
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
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()

实例

在日常开发中,不推荐在类的外部给对象增加属性
如果在运行时,没有找到属性,程序会报错
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
结果证明
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)

例子2:地址id

在python中,一切皆为对象,每个对象会产生三个属性,id,数值(value),类型type
这里需要注意的是地址相同时,数值一定相同,而地址不同时,数值可相同,也可不同
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)

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

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

三、方法

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

例子

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

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

2、del方法(内置方法)

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

实例

python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
结果显示
当我们创建完对象时,会被自动调用,删除对象时,del方法会被调用,若不删除对象,那么会先执行其他的命令,在调用del方法
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)

3、str方法(内置方法)

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

实例:

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

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

类的结构

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

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

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

实例1

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

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

通过 类名. 的方式可以直接访问类的属性或者调用类的方法
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
结果显示
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)

实例2

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

类方法就是针对类对象定义的方法
在类方法内部就可以直接访问类属性或者调用其他类方法
语法如下:
@classmethod
def 类方法(cls):
pass
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
结果显示
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)

实例3

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

语法如下:
@staticmethod
def 静态方法():
pass
静态方法需要修饰器@staticmethod来标识,告诉解释器这是一个静态方法
通过类名,调用静态方法
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
结果显示
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)

实例4:综合应用

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

4.主程序步骤
1.查看帮助信息
2.查看历史最高分
3.创建游戏对象,开始游戏
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
结果显示
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)

实例5:私有属性和方法

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

父类的私有属性和私有方法
1.子类对象不能在自己的方法内部,直接访问父亲的私有属性和私有方法
2.子类对象可以通过父类的公有方法间接访问到私有属性和私有方法
私有属性,私有方法是对象的隐私,不对外公开,外界和子类不能直接访问
私有属性,私有方法常用做一些内部的事情
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
结果显示
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
想要对私有方法进行调用,可以在类中定义公有方法,通过公有方法间接调用私有方法

四、新式类和旧式类

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

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

实例1

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

实例2、 new()方法

_ new _ ()方法是在类准备将自身实例化时调用。
_ new _ ()方法始终都是类的静态方法,即使没有被加上静态方法装饰器。
第一种例子
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
结果显示
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
第二个例子
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)
结果显示
python中的面向对象(简单类的创建以及内置方法,私有属性和私有方法的使用)