面向对象---多态

19 篇文章 1 订阅

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


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值