python学习(第七章)

更加抽象

对象的魔力

  • 多态: 意味着可以对不同类的对象使用同样的操作
  • 封装: 对外部世界隐藏对象的工作细节
  • 继承: 以普通的类为基础建立专门的类对象

多态和方法

  • 方法: 绑定到对象特性上面的函数称为方法。

多态的多种形式

封装

继承

类和类型

创建自己的类

  • 建立一个简单的类:

    __metaclass__ = type #确定使用新式类
    class Person:
    def setName(self, name):
    self.name = name
    def getName(self):
    return self.name
    def greet(self):
    print "Hello, world! I'm %s." % self.name
    p = Person()
    p.setName('Luke Skywalker')
    print p.getName()
    p.greet()
    
  • self(对象自身)的用处和存在的必要性。没有它的话,成员方法就没有访问他们要对其特性进行操作的对象本身。

特性、函数和方法

私有化
  • 为了让方法或特性变为私有(从外部无法访问),只要在它的名字前面加上双下划线即可:

    class Securetive:
    def __inaccessible(self):
    print "Bet you can't see me..."
    def accessible(self):
    print "The secret message is:"
    self.__inaccessible()
    s = Securetive()
    # s.__inaccessible()
    s.accessible()
    

类的命名空间

指定超类

  • 子类可以扩展超类的定义,将其他类名写在class语句后的圆括号内可以指定超类:

    class Filter:
    def init(self):
    self.blocked = []
    def filter(self, sequence):
    return [x for x in sequence if x not in self.blocked]
    class SPAMFilter(Filter):
    def init(self):
    self.blocked = ['SPAM']
    f = Filter()
    f.init()
    print f.filter([1, 2, 3])
    s = SPAMFilter()
    s.init()
    print s.filter(['SPAM', 'SPAM', 'SPAM', 'SPAM', 'eggs', 'bacon', 'SPAM'])
    

调查继承

  • 如果想要查看一个类是否是另一个类的子类,可以内建issubclass函数:

  • 使用isinstance方法检查一个对象是否是一个类的实例

多个超类

一些关于面向对象设计的思考

  • 将属于一类的对象放在一起。如果一个函数操纵一个变量,那么两者最好都在类内作为特性和方法出现
  • 不要让对象过于亲密
  • 要小心继承,尤其是多重继承
  • 简单就好

  • 当考虑需要什么类以及类要有什么方法时,应该尝试下面的方法:

    1. 写下问题的描述(程序要做什么),把所有名词、动词和形容词加下划线
    2. 对于所有名词,用作可能的类
    3. 对于所有动词,用作可能的方法
    4. 对于所有形容词,用作可能的特性
    5. 把所有的方法和特性分配到类

新函数

函数 & 描述 \\
callable(object) & 确定对象是否可调用 \\
getattr(object, name[, default]) & 确定特性的值,可选择提供默认值 \\
hasattr(object, name) & 确定对象是否有给定的特性 \\
isinstance(object, class) & 确定对象是否是类的实例 \\
issubclass(A, B) & 确定A是否是B的子类 \\
random.choice(sequence) & 从非空序列中随机选择元素 \\
setattr(object, name, value) & 设定对象的给定特性为value \\
type(object) & 返回对象的类型 \\
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值