首页 > 程序开发 > Web开发 > Python >

Python中的基类,实例,多态,类结构,重要设计模式等知识学习

2018-07-26

Python中的基类,实例,多态,类结构,重要设计模式等知识学习。一,新式类,旧式类。新式类 :后面是以object结尾的,旧式类(经典类),基类:定义类时,后面的括号后面写上object,会自动继承object类

一,新式类,旧式类

新式类 :后面是以object结尾的

旧式类(经典类)

基类:定义类时,后面的括号后面写上object,会自动继承object类

新式类

\

旧式类

\

注意:dir函数可以查看函数继承的方法

二,实例

1,使用面向对象开发,第一部是设计类

2,使用 类名() 创建对象,创建对象的动作有两步

1,在内存中为对象分配空间

2,调用初始化方法__init__为对象初始化

3,对象创建后,内存中就有了一个对象的是是在在的存在--实例

因此:

1,创建出来的对象叫做类的实例

2,创建对象的动作叫做实例化

3,对象的属性叫做实例属性

4,对象调用的方法叫做实例化方法

在程序执行时:

1,对象各自拥有自己的实例属性

2,调用对象的方法,可以通过self访问自己的属性,调用自己的方法

结论:

1,每一个对象都有自己独立的内存空间,保存各自不同的属性

2,多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用转移到方法的内部

三,多态

多态:不同的子类(继承覆盖的知识)对象调用相同的方法,产生不同的结果

示例

\

四,类结构

1,类是一个特殊的对象

Python中一切皆对象

class AAA: 定义的类属性属于类对象

obj1 = AAA: 属于实例对象

在运行程序时,类 同样会被加载到内存

在python中,类 是一个特殊的对象--类对象

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

通过 类名. 的方式可以直接访问类的属性或者调用类的方法

类属性就是针对类对象定义的属性

使用赋值语句在class关键字下方可以定义类属性

类属性用于记录这个类的相关的特性

类方法就是针对类对象定义的方法

在类方法内部就可以直接访问类属性或者调用其他类方法

语法如下:

@classmethod

def 类方法(cls):

pass

示例1

\

示例2

\

2,静态方法:

在开发时,如果需要在类中封装一个方法,这个方法

即不需要访问实例属性或者调用实例方法

也不需要访问类属性或者调用类方法

这个时候可以把这个方法封装成一个静态方法

语法如下:

@staticmethod

def 静态方法():

pass

静态方法需要修饰器@staticmethod来标识,告殊解释器这是一个静态方法

通过类名,调用静态方法

示例1:

\

示例2:

需求

1,设计一个Game类

2,属性

记录游戏的历史最高分

记录当前游戏玩家的玩家姓名

3,方法

方法show_help显示游戏帮助信息

方法show_top_score显示历史最高分

方法start_game开始当前玩家的游戏

4,主程序步骤

1,查看帮助信息

2,查看历史最高分

3,创建游戏对象,开始游戏

\

总结:

1,实例方法:方法内部不需要访问实例属性

2,类方法:方法内部只需要访问类属性

3,静态方法:方法内部不需要访问实例属性和类属性

如果方法内部既需要访问实例属性又需要访问类属性,应该定义实例方法

五,重要设计模式

使用类名()创建对象时,python的解释器首先会调用__new__方法为对象分配空间

__new__是一个有object基类提供的内置的静态方法,主要有两个作用:

在内存中为对象分配空间

返回对象的引用

python解释器获得对象的引用后将引用作为第一个参数,传递给__init__方法

__new__:负责给对象分配空间

__init__(初始化方法)负责给对象初始化

示例1

需求:不同的对象的地址相同

\

在每次使用 类名()创建对象时,python的解释器都会自动调用两个方法

__new__分配空间

__init__对象初始化

但在上一小结中 __new__方法改造之后,每次都会得到第一次被创建对象的引用

但是:初始化方法还会被再次调用

示例2

需求:不同的对象地址相同并且初始化方法只执行一次

\
相关文章
最新文章
热点推荐