一、类属性
在Python中一切皆对象,类也是一个对象--->类对象,在程序运行中,类对象在内存中只有一份,通过它可以创建出很多个对象实例,除了封装实例和属性的方法外,类对象还可以拥有自己的属性和方法:类属性和类方法
通过类名的方式可以直接访问类的属性
类属性其实就是 给类对象定义类的属性,通常用来记录与这个类相关的特征
二、类方法
类属性就是针对类对象定义的,使用赋值语句在class关键字下可以定义属性,类属性用于记录于这个类相关的特性
类方法就是针对类对象定义的方法,在类方法内部就可以直接访问类属性或调用其他类方法
三、类的结构
1.使用面向对象开发,第一步是设计类
2.使用 类名() 创建对象,创建的动作有两步
1)在内存中为对象分配空间
2)调用初始化方法__init__为对象初始化
3.对象创建后,内存中就有一个对象的实实在在的存在
因此:
- 创建出来的对象叫做类的实例
- 创建对象的动作叫做实例化
- 对象的属性叫做实例属性
- 对象调用的方法叫做实例方法
在程序执行时:
- 对象各自拥有自己的实例属性
- 调用对象的方法,可以通过self,访问自己的属性,调用自己的方法
由此得出结论:
1)每个对象都有自己独立的内存空间,保存各自不同的属性
2)多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部
四、静态方法
在开发中,如果需要在类中封装一个方法,这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候,我们就可以把这个方法封装成一个静态方法
五、实例:
1.设计一个Game类
2.属性
定义一个类属性top_score记录游戏的历史最高分(与这个游戏有关,每次游戏的时候与游戏最高分无关)
定义一个实例属性player_name记录当前游戏玩家的玩家姓名
3.方法:
静态方法show_help显示游戏帮助信息(即不需要访问类属性,也不需要访问实例熟悉)
类方法show_top_score显示历史最高分(访问类属性)
实例方法start_game开始当前玩家的游戏
1)查看帮助信息
2)查看历史最高分
3)创建游戏对象,开始游戏
案例小结:
1.实例方法--方法内部需要访问实例属性
实例方法内部可以使用 类名. 访问类属性
2.类方法:方法内部“只”需要访问类属性
3.静态方法:方法内部,不需要访问实例属性和类属性
提问:
如果方法内部 即需要访问实例属性,又需要访问类属性,应该定义什么方法?
答案:
应该定义实例方法
因为,类只有一个,在实例方法内部可以使用类名,访问类属性