1封装:根据职责将属性和方法封装到一个抽象的类中
定义类的准则
2继承:实现代码的重用相同代码不需要重复的编写
设计类的技巧
子类针对自己特有的需求
多态:
不同的子类调用相同的执行方法,产生不同的执行效果
"""
# 定义一个猪类,猪会哼哼哼
class Pig(object):
def __init__(self,name):
self.name=name
def game(self):
print '%s 哼哼哼' %self.name
# 定义一个继承了猪类的八戒类,会哈哈哈
class Bajie(Pig):
def game(self):
print '%s 哈哈哈' % self.name
# 定义一个人类,会跟猪玩耍
class Person(object):
def __init__(self,name):
self.name = name
def game_with_pig(self,pig):
print '%s 和 %s 玩耍' % (self.name,pig.name)
pig.game()
# 创建一个猪对象
# wangcai = Pig('旺财')
wangcai = Bajie('旺财')
# 创建一个人对象
xiaoming = Person('小明')
# 玩耍
xiaoming.game_with_pig(wangcai)
使用类名()创建对象时,python的解释器首先会调用__new__方法为对象分配空间
__new__是一个由object基类提供的内置的静态方法,主要有两个作用
在内存中为对象分配空间
返回对象的引用
python的解释器获得对象的引用后,将引用作为第一个参数,传递给__init__方法
# __new__:负责给对象分配空间 __init__(初始化方法)负责给对象初始化
"""
"""
二。
单例:让类创建的对象
在系统中只有唯一的一个实例
"""
"""
三。
只执行一次初始化工作
在每次使用 类名() 创建对象时,python的解释器都会自动调用两个方法
__new__ 分配空间
__init__ 对象初始化
01
class MusicPlayer(object):
def __new__(cls, *args, **kwargs):
# 第一个参数 cls:哪一个类调用,就传递哪一个类
# 第二个参数 *args:多值参数
# 第三个参数 **kwargs:多值的字典参数
# 创建对象的时候,new方法会被自动调用
# 重写了父类的方法
#1.创建对象,new方法会被自动调用
print '创建对象,分配空间'
# 2.为对象分配空间
instance = object.__new__(cls)
# 3.返回对象的引用
return instance
def __init__(self):
print '播放器初始化'
player1 = MusicPlayer()
print player1
player2 = MusicPlayer()
print player2
02
class MusicPlayer(object):
instance = None
def __new__(cls, *args, **kwargs):
# 第一个参数 cls:哪一个类调用,就传递哪一个类
# 第二个参数 *args:多值参数
# 第三个参数 **kwargs:多值的字典参数
# 创建对象的时候,new方法会被自动调用
# 重写了父类的方法
#1.创建对象,new方法会被自动调用
if cls.instance is None:
cls.instance = object.__new__(cls)
return cls.instance
player1 = MusicPlayer()
print player1
player2 = MusicPlayer()
print player2
03
class MusicPlayer(object):
instance = None
init_flag = False
def __new__(cls, *args, **kwargs):
# 第一个参数 cls:哪一个类调用,就传递哪一个类
# 第二个参数 *args:多值参数
# 第三个参数 **kwargs:多值的字典参数
# 创建对象的时候,new方法会被自动调用
# 重写了父类的方法
#1.创建对象,new方法会被自动调用
if cls.instance is None:
cls.instance = object.__new__(cls)
return cls.instance
def __init__(self):
if MusicPlayer.init_flag:
return
print '初始化播放器'
MusicPlayer.init_flag = True
player1 = MusicPlayer()
print player1
player2 = MusicPlayer()
print player2