Python学习第六天 | 基类,实例,多态,类结构,重要设计模式

一,新式类,旧式类

新式类 :后面是以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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值