python面向对象编程基础

时间:2022-12-20 14:44:24
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)察看