1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
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)察看
|