python------多态,设计模式

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值