第六章 面向对象
一、面向对象基础知识
①类与对象
<1>类和对象是面向对象的两个核心
<2>类只有一个,而对象可以有很多个
<3>类的命名满足大驼峰命名:1、每一个单词首字母大写2、单词与单词之间无下划线
<4>在使用面向对象开发前应该首先分析需求需要确定一下程序中包含哪些类
②初始化方法
当使用类名()创建对象时,会自动执行以下操作:
<1>为对象在内存中分配空间二
<2>为对象的属性设置初始值:这个初始方法就是_init_方法(_init
_是对象的内置方法)
③定义简单的类的方法
class 类名:
def 方法(self.参数列表)
④创建对象
对象变量=类名()
⑤在初始化方法内部定义属性
在_init_方法的内部使用,self.属性名=属性的初始值
二、面向对象三大特点
①封装
<1>封装是面向对象编程的一大特点
<2>面向对象编程的第一步将属性和方法封装到一个抽象的类中
<3>对象方法的细节都被封装在类的内部
<4>外界使用类创建对象,然后让对象调用方法
<5>私有属性和私有方法
②继承
<1>定义:子类拥有父类的所有方法和属性
<2>语法 class 类名(父类名)
pass
<3>子类继承自父类可以直接享受父类中已经封装好的方法,不需要再次开发<4>子类中应该根据职责封装子类特有的属性和方法
<5>多继承性——子类拥有多个父类
1、object的是python为所有对象提供的基类,提供有一些类置的属性和方法,可以使用dir函数查看
2、如果没有指定父类,会默认使用object作为该类的基类
3、语法 class 类名(object):
pass
<6>父类的私有属性和私有方法
③多态——不同的子类对象调用相同的父类方法产生不同的执行结果
三、类
<1>python中一切皆对象,类一个特殊的对象
<2>类对象
1、类属性:类属性就是给类对象中定义属性
2、类方法:类方法就是针对类对象定义的方法
语法 @classmethod(告诉解释器这是一个类方法)
def 类方法名(cls):
pass
#使用通过类名.的方式可以访问类的属性或者调用类的方法
#可以使用cls.访问类的属性和调用其他方法
3、静态方法:通过类名点调用静态方法,静态方法不需要访问实例属性\类属性也不需要调用实例方法\类方法
语法 @staticmethod
def 静态方法名():
pass
四、单例
<1>使用单例的目的
<2>_new_方法
1、使用_new_方法一定要返回return super.new(cls):
2、_new_方法是一个静态方法,在调用时需要主动传递cls参数
<3>引例
class Music_player(object):
#记录第一个类被创建对象的引用
instance = None #类属性
init_flag = True
def new(cls, *args, **kwargs):
#1、判断类属性是否为空对象
if cls.instance is None:
#调用父类的方法,为第一个对象分配空间
cls.instance = super().new(cls)
#返回类属性的对象引用
return cls.instance
def init(self):
#1、 判断是否执行过初始化动作
if Music_player.init_flag:
return
#2、如果没有执行过,在执行初始化动作
print(“初始化播放器”)
#3、修改类属性的标记
Music_player.init_flag = True
#创建init_flag的目的要求初始化动作只被执行一次
#创建多个对象
Player1 = Music_player()
print(Player1)
Player2 = Music_player()
print(Player2)
结果:
<main.Music_player object at 0x000001897FBBE9E8>
None