更加抽象
对象的魔力
- 多态: 意味着可以对不同类的对象使用同样的操作
- 封装: 对外部世界隐藏对象的工作细节
- 继承: 以普通的类为基础建立专门的类对象
多态和方法
- 方法: 绑定到对象特性上面的函数称为方法。
多态的多种形式
封装
继承
类和类型
创建自己的类
-
建立一个简单的类:
__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方法检查一个对象是否是一个类的实例
多个超类
一些关于面向对象设计的思考
- 将属于一类的对象放在一起。如果一个函数操纵一个变量,那么两者最好都在类内作为特性和方法出现
- 不要让对象过于亲密
- 要小心继承,尤其是多重继承
-
简单就好
-
当考虑需要什么类以及类要有什么方法时,应该尝试下面的方法:
- 写下问题的描述(程序要做什么),把所有名词、动词和形容词加下划线
- 对于所有名词,用作可能的类
- 对于所有动词,用作可能的方法
- 对于所有形容词,用作可能的特性
- 把所有的方法和特性分配到类
- 写下问题的描述(程序要做什么),把所有名词、动词和形容词加下划线
新函数
函数 & 描述 \\
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) & 返回对象的类型 \\
作者:zixie1991 发表于2013-2-13 14:20:17 原文链接
阅读:33 评论:0 查看评论