python面向对象编程基础
1、oop的意义:oop就是代码的重用:分解代码,最小化代码的冗余以及对现存的代码进行定制来编写程序。而不是实地的修改代码,或者从头开始 2、继承搜索在那里查找属性:继承搜索会先在实例对象中寻找属性,然后 才是创建实例的类,之后是所有较高的超类,由对象树底端到顶端,并且至右侧。当属性首次找到时,搜索就会停止。因为在此过程中变量名的最低版本会获胜。 3、类对象和实例对象有什么不同:类和实例对象都是命名空间(由作为属性的变量包 )俩者 主要区别是,类是建立多个实例的工厂,类也支持运算符重载方法,由实例继承,而且其中的任何函数视为处理实例的特殊方法 4、为什么类方法函数中的第一个参数特殊:类方法函数中的第一个参数之所以特殊,是因为他总是接受将方法调用视为隐含主体的实例对象。按照惯例,通常称为self.因为方法函数默认zonshi 含有这个隐含的主体对象环境,之所以是这个面向对象。也就是色好几用来处理或者修改对象 5、__init__方法的作用:每次类实例创建时,python会自动调用它,这也称为构造函数。除了明确传入类的名称的任何参数外,还会因性道德传入新的实例。 6、类有两个属性,一个是__class__,另外一个是__base__ 7、提取一个类的全部属性的工具类 class AttrDisplay: def gatherAttr(self): attr = [] for key in sorted(self.__dict__): attr.append('%s=%s' %(key,getattr(self,key))) def __str__(self): return '[%s:%s]' %(self.__class_.name,self.getAttr()) 8、对象的持久化 pickle 任意对象和字节串之间的序列化 dbm 实现一个可通过键访问的文件系统,以存储字符串 shelve 使用另两个按照键 把python对象 存储到一个文件中 class Person(): pass Tom = Person() Jim = Person() John = Person() import shelve db = shelve.open("persondb") for object in (tom,Jim,John): db[字符串]=object db.close() 9、调用类的方法的两种方法 instancename.methodname(parameters) 或 classname.methodname(instancename,parameters) 10、抽象超类,需要由子类填充方法,他们也可以以特殊的类语法来实现 class Super: def delegate(self): self.action() class Provider(Super): def action(self): print('in Provicer.action') x = Provider() x.delegate() #输出:in Provicer.action 11、Python 2.6和Python3.0的抽象超类 in python3.0 from abc import ABCMeta,abstractmethod class Super(metaclass = ABCMeta) @abstractmethod def method(self,...): pass 例如: from abc import ABCMeta,abstractmethod class Super(metaclass=ABCMeta): def delegate(self): self.action() @abstractmethod def action(self): pass; class Sub(Super): def action(self): print('spam') x = Sub() # 不能通过一个抽象类创建一个实例,除非抽象类的抽象方法以及在子类定义 x.delegate()#输出:spam in python2.6 class Super __metaclass = ABCMeta @abstractmethod def method(self,...): pass 12、命名空间:完整内容 察看继承链 # file classtree.py def classtree(cls,indent): print('.'*indent+cls.__name__) for supercls in cls.__base__: classtree(supercls,indent+3) def instancetree(inst): print('Tree of %s ' %inst) class(supercls,indent+3) 在python3.0中会将object打印出来 13、文档字符串 modulename.__doct__ #察看文档顶端的__doc__ modulename.functioname.__doc__#察看函数__doc__ modulename.classname.__doc__#察看类__doc__ modulename.classname.functionname.__doc__#察看类方法__doc__ 或者 通过help(modulename)察看