第七章-更加抽象——python基础教程(第二版)笔记

来源:互联网 发布:centos 7 安装desktop 编辑:程序博客网 时间:2024/05/16 13:59

创建自己的对象,听着真刺激

7.1对象的魔力

**对象特点:
1.多态(polymorphic):对不同类的对象使用相同的操作
2.封装( encapsulation):对外部世界隐藏对象的工作细节
3.继承(inheritance):以通用的类为基础建立专门的对象**

7.1.1多态

'''def getnum(object):  #以列表,元组和字典形式都可以调用的函数    if isinstance(object,tuple):#isinstance进行类型检查,是否是元组        return object[1]    elif isinstance(object,dict):#是否是字典        return int(object["num"])    else:        return magic_network_method(object)'''print 1+1print "hello"+"world"  #加号也是一种多态,无论数字还是数组都可以相加

7.1.2封装

7.1.3继承

7.2类和类型

#7.2.2创建自己的类(class)_metaclass_=type #确定使用新式类class Person: #person 类的名字,class语句会在函数定义的地方创建自己的命名空间    def setName(self,name):        self.name=name    def getName(self):        return self.name     def greet(self):        print "hello,world! I'm %s."% self.name foo=Person()bar=Person()foo.setName("luke skywalker")bar.setName("anakin skywalker")foo.greet()  #结果hello,world! I'm luke skywalker.bar.greet()  #结果hello,world! I'm anakin skywalker.#7.2.3特效、函数和方法class Class:    def method(self):        print "abc"def function():        print "def"instance=Class()    #调用类instance.method()   #调用类中的method 结果abcinstance.method=function #将特性绑到普通函数上instance.method() #结果defa=instance.method #绑定方法a()               #结果def#私有化,与封装结合#7.2.4类的命名空间#两个等价的语句def foo(x):    return x*xprint foo(3) #结果 9foo=lambda x:x*xprint foo(3) #结果 9#在类命名空间中执行#7.2.5指定超类#单独定义类中的子类class Filter:    def init(self):        self.blocked=[int]    def filter(self,sequence):        return[x for x in sequence if x not in self.blocked]class SPAMFilter(Filter):  #fliter类中的一个子类    def init(self):#重写Filter中的init方法        self.blocked=["SPAM"]f=Filter()f.init()print f.filter([1,2,3]) #结果[1,2,3]s=SPAMFilter()s.init()print s.filter(["SPAM","a","c"]) #结果['a', 'c']#7.2.6检查继承,查看一个类是否是另一个类的子类print issubclass(SPAMFilter,Filter)   #使用is subclass函数判断是否是子类#7.2.7多个超类,多重继承(multiple inheritance)class Calculator:    def calculate(self,expression):        self.value=eval(expression)class Talker:    def talk(self):        print "value is",self.valueclass TalkingCaculator(Calculator,Talker):#多重继承    passa=TalkingCaculator()a.calculate("1+2")a.talk() #结果value is 3#7.2.8接口和内省print hasattr(a,"talk") #结果Ture
0 0
原创粉丝点击