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)察看