1.封装(定义类的准则):根据职责将属性和方法封装到一个抽象的类中。
2.继承(设计类的技巧):实现代码的重用,相同的代码不需要重复的编写,
子类针对自己特有的需求,编写特定的代码。
3.多态
不同的子类(这是之前提到的继承的知识)
对象调用相同的方法,产生不同的执行结果
实例演练:
class Dog(object):
def __init__(self,name):
self.name = name
def game(self):
print '%s 蹦蹦跳跳的玩。。' % self.name
class Xiaotianquan(Dog):
def game(self):
print '%s 飞到天上玩' % self.name
class Person(object):
def __init__(self,name):
self.name = name
def game_with_dog(self,dog):
print '%s 和 %s 快乐的玩耍' % (self.name,dog.name)
dog.game()
# 1.创建一个狗对象
wangcai = Dog('旺财')
wangcai = Xiaotianquan('飞天神狗')
# 2.创建一个人对象
xiaoming = Person('小明')
# 让小明和狗玩
xiaoming.game_with_dog(wangwang)
xiaoming.game_with_dog(wangcai)
新类:有继承自基类object
旧类:无继承自基类
注意:单个*指的是长度不确定的列表,两个*指的是长度不确定的字典
使用类名()创建对象时,python的解释器首先会调用__new__方法为对象分配空间
__new__是一个由object基类提供的内置的静态方法,主要有两个作用:
(1)在内存中为对象分配空间
(2)返回对象的引用
python的解释器获得对象的引用后,将引用作为第一个参数,传递给__init__方法
总结:__new__:负责给对象分配空间 __init__(初始化方法)负责给对象初始化
实例演练:
class MusicPlayer(object):
instance = None
init_flag = False
def __new__(cls, *args, **kwargs):
# 第一个参数 cls:哪一个类调用,就传递哪一个类
# 第二个参数 *args:多值参数
# 第三个参数 **kwargs:多值的字典参数
# 创建对象的时候,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