python面向对象编程基础

时间:2014-04-29 22:06:05   收藏:0   阅读:664
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)察看

  

python面向对象编程基础,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!