python之更加抽象 2014-4-6

#更加抽象 12:50pm- 14:50 p112-
1.对象的魔力
多态 如count 在多种数据类型中都可以实现计数的功能
封装 对全局作用域中其他区域隐藏多余信息的原则
继承
2.类和类型
创建类
class Person:
def setName(self,name)
self.name=name
def getName(self):
return self.name
def greet(self):
print "hello I am %s."%self.name

特性 函数和方法
将方法加上私有特性在方法名前加双下划线
__add()

类的命名空间
def foo(x):return x*x
等价于 foo=lambda x:x*x
类的定义实际就是代码快

指定超类
子类可以扩展超类的定义
将其他类名写在class 语句后的圆括号内可以指定超类:
class Filter:
def init(self):
self.blocked=[]
def filter(self,sequence):
return [x for x in sequence if c not in slef.locked]
class SPAMFilter(Filter):#SPAMFiter是Filter的子类
def init(self):#重写Filter超类中的init方法
self.blocked=['SPAM']

调查继承
如果想查看一个类是否是另一个的子类 可以使用内建的issubclass函数
>>>issubclass(SPAMFilter,Filter)
True
>>>issubclass(Filter,SPAMFilter)
False
如果想要值得已知类的基类 可以直接使用它的特殊特性__bases__;
>>>SPAMFilter.__bases__
(<class __main__.Filter at 0x171e40>)
>>>Filter.__bases__
()
同样 还可以使用isinstance方法检查一个对象是否是一个类的实例
>>>s=SPAMFilter()
>>>isinstances(s,SPAMFilter)
True
>>>isinstances(s,Filter)
True
>>>isinstances(s,str)
False

多个超类
class Calculator:
def calculate(self,expression):
self.value=eval(expression)

class Talker:
def talk(self):
print 'Hi,my value is',self.value
class TalkingCalculator(Calculator,Talker):
pass
TalkingCalculator从自己的超类继承所有的行为 从Calculator类继承calculate方法 从Talker类继承talk方法
这样就成了会说话的计算器 talking calculator
这种行为称为多重继承 注意顺序 先继承的类的方法会重写后继承的类中的方法

接口和内省(待补充)

posted @ 2014-04-07 10:13  戎狼图腾  阅读(142)  评论(0编辑  收藏  举报