python学习笔记Word文件下载.docx
- 文档编号:4571900
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:20
- 大小:33.69KB
python学习笔记Word文件下载.docx
《python学习笔记Word文件下载.docx》由会员分享,可在线阅读,更多相关《python学习笔记Word文件下载.docx(20页珍藏版)》请在冰点文库上搜索。
6
7#引发和捕获异常
8try:
9raiseHappyException
10except:
11print("
HappyException"
)
12
13try:
14raiseHappyException()
15except:
16print("
17
18#捕获多种异常
19try:
20raiseHappyException
21except(HappyException,TypeError):
22print("
23
24#重新引发异常
25try:
26try:
27raiseHappyException
28except(HappyException,TypeError):
29raise
30except:
31print("
32
33#访问异常实例
34try:
35raiseHappyException("
都是我的错"
36except(HappyException,TypeError),e:
37print(e)
38
39#按类型捕获
40try:
41raiseHappyException
42exceptHappyException:
43print("
44exceptTypeError:
45print("
TypeError"
46
47#全面捕获
48try:
49raiseHappyException
50except:
51print("
52
53#没有异常的else
54try:
55pass
56except:
57print("
58else:
59print("
没有异常"
60
61#总会执行的final
62try:
63pass
64except:
65print("
66else:
67print("
68finally:
69print("
总会执行"
面向对象
先上一张图
几个规则:
1.一切都是对象,python中一切都是对象,每个对象都包含一个__class__属性以标记其所属类型。
2.每个对象(记得一切都是对象啊)都包含一个__dict__属性以存储所有属性和方法。
3.每个类型都包含一个__bases__属性以标记其父类。
4.属性和方法的访问规则:
依次搜索instance、子类、父类、父类的父类、直到object的__dict__,如果找到就返回。
5.属性和方法的设置规则:
直接设置instance.__dict__。
6.以上属性和方法访问或设置规则没有考虑“魔法方法”,下文会解释。
示例
3__metaclass__=type
4
5#类型定义
6#实例方法必的第一个参数代表类型实例,类似其他语言的this。
7classAnimal:
8name="
未知"
#属性定义。
9
10def__init__(self,name):
#构造方法定义。
11self.name=name
13defgetName(self):
#实例方法定义。
14returnself.name
15
16defsetName(self,value):
17self.name=value
18
19print(Animal.name)#未知
20print(Animal.__dict__["
name"
])#未知
21
22animal=Animal("
狗狗"
23print(animal.name)#狗狗
24print(animal.__dict__["
])#狗狗
25print(Animal.name)#未知
26print(Animal.__dict__["
27print(animal.__class__.name)#未知
28print(animal.__class__.__dict__["
1#类型定义中的代码会执行,是一个独立的作用域。
2classTestClass:
3print("
类型定义中"
)#类型定义中
绑定方法和未绑定方法
1classTestClass:
2defmethod(self):
3print("
测试方法"
5test=TestClass()
6print(TestClass.method)#<
unboundmethodTestClass.method>
7print(test.method)#<
boundmethodTestClass.methodof<
__main__.TestClassobjectat0x021B46D0>
>
8
9TestClass.method(test)#测试方法
10test.method()#测试方法
绑定方法已经绑定了对象示例,调用的时刻不用也不能传入self参数了。
注:
使用对象访问实例方法为何会返回绑定方法?
这个还得等到学完“魔法方法”才能解释,内部其实是拦截对方法成员的访问,返回了一个Callable对象。
私有成员
1#私有成员
3__private_property=1
5def__private_method():
6pass
8print(TestClass.__dict__)#{'
__module__'
:
'
__main__'
'
_TestClass__private_method'
<
function__private_methodat0x0212B970>
_TestClass__private_property'
1
难怪访问不了了,名称已经被修改了,增加了访问的难度而已。
多重继承
1#多重继承
2classBase1:
3pass
5classBase2:
6pass
7
8classChild(Base2,Base1):
9pass
10
11child=Child()
12print(isinstance(child,Child))#True
13print(isinstance(child,Base2))#True
14print(isinstance(child,Base1))#True
如果继承的多个类型之间有重名的成员,左侧的基类优先级要高,上例子Base2会胜出。
接口那里去了,鸭子类型比接口更好用。
1classTestClass1:
2defsay(self):
我是鸭子1"
5classTestClass2:
6defsay(self):
7print("
我是鸭子2"
9defduck_say(duck):
10duck.say()
11
12duck_say(TestClass1())#我是鸭子1
13duck_say(TestClass2())#我是鸭子2
调用父类
1#调用父类
2classBase:
3defsay(self):
4print("
Base"
5
6classChild(Base):
7defsay(self):
8Base.say(self)
9super(Child,self).say()
10print("
Child"
12child=Child()
13child.say()
魔法方法
详细内容参考:
对象构造相关:
__new__、__init__、__del__。
1fromos.pathimportjoin
3classFileObject:
4'
'
Wrapperforfileobjectstomakesurethefilegetsclosedondeletion.'
6def__init__(self,filepath='
~'
filename='
sample.txt'
):
7#openafilefilenameinfilepathinreadandwritemode
8self.file=open(join(filepath,filename),'
r+'
10def__del__(self):
11self.file.close()
12delself.file
运算符重载:
所有运算符都能重载。
1classWord(str):
2'
Classforwords,definingcomparisonbasedonwordlength.'
3
4def__new__(cls,word):
5#Notethatwehavetouse__new__.Thisisbecausestrisanimmutable
6#type,sowehavetoinitializeitearly(atcreation)
7if'
inword:
8print"
Valuecontainsspaces.Truncatingtofirstspace."
9word=word[:
word.index('
)]#Wordisnowallcharsbeforefirstspace
10returnstr.__new__(cls,word)
12def__gt__(self,other):
13returnlen(self)>
len(other)
14
15def__lt__(self,other):
16returnlen(self)<
18def__ge__(self,other):
19returnlen(self)>
=len(other)
20
21def__le__(self,other):
22returnlen(self)<
24print(Word("
duan"
)>
Word("
wei"
))
属性访问。
1classAccessCounter:
Aclassthatcontainsavalueandimplementsanaccesscounter.
3Thecounterincrementseachtimethevalueischanged.'
5def__init__(self,value):
6super(AccessCounter,self).__setattr__('
counter'
0)
7super(AccessCounter,self).__setattr__('
value'
value)
9def__setattr__(self,name,value):
10ifname=='
11super(AccessCounter,self).__setattr__('
self.counter+1)
12#Makethisunconditional.
13#Ifyouwanttopreventotherattributestobeset,raiseAttributeError(name)
14super(AccessCounter,self).__setattr__(name,value)
16def__delattr__(self,name):
17ifname=='
18super(AccessCounter,self).__setattr__('
19super(AccessCounter,self).__delattr__(name)
集合实现。
1classFunctionalList:
Aclasswrappingalistwithsomeextrafunctionalmagic,likehead,
3tail,init,last,drop,andtake.'
5def__init__(self,values=None):
6ifvaluesisNone:
7self.values=[]
8else:
9self.values=values
11def__len__(self):
12returnlen(self.values)
13
14def__getitem__(self,key):
15#ifkeyisofinvalidtypeorvalue,thelistvalueswillraisetheerror
16returnself.values[key]
18def__setitem__(self,key,value):
19self.values[key]=value
21def__delitem__(self,key):
22delself.values[key]
24def__iter__(self):
25returniter(self.values)
26
27def__reversed__(self):
28returnFunctionalList(reversed(self.values))
29
30defappend(self,value):
31self.values.append(value)
32defhead(self):
33#getthefirstelement
34returnself.values[0]
35deftail(self):
36#getallelementsafterthefirst
37returnself.values[1:
]
38definit(self):
39#getelementsuptothelast
40returnself.values[:
-1]
41deflast(self):
42#getlastelement
43returnself.values[-1]
44defdrop(self,n):
45#getallelementsexceptfirstn
46returnself.values[n:
47deftake(self,n):
48#getfirstnelements
49returnself.values[:
n]
可调用对象,像方法一样调用对象。
1classEntity:
Classtorepresentanentity.Callabletoupdatetheentity'
sposition.'
4def__init__(self,size,x,y):
5self.x,self.y=x,y
6self.size=size
8def__call__(self,x,y):
9'
Changethepositionoftheentity.'
10self.x,self.y=x,y
11print(x,y)
13entity=Entity(5,1,1)
14entity(2,2)
资源管理
1classCloser:
2def__enter__(self):
3returnself
5def__exit__(self,exception_type,exception_val,trace):
6print("
清理完成"
7returnTrue;
9withCloser()ascloser:
10pass
对象描述符。
1classMeter(object):
Descriptorforameter.'
4def__init__(self,value=0.0):
5self.value=float(value)
6def__get__(self,instance,owner):
7returnself.value
8def__set__(self,instance,value):
9self.value=float(value)
11classFoot(object):
12'
Descriptorforafoot.'
14def__get__(self,instance,owner):
15returninstance.meter*3.2808
16def__set__(self,instance,value):
17instance.meter=float(value)/3.2808
19classDistance(object):
20'
Classtorepresentdistanceholdingtwodescriptorsforfeetand
21meters.'
22meter=Meter()
23foot=Foot()
Mixin(也叫掺入)
掺入模块:
playable.py
3defpaly(self):
4print("
游戏中..."
掺入目标模块:
3classAnimal:
4fromplayableimportpaly
6animal=Animal()
7animal.paly()#游戏中...
OpenClass(打开类型,从新定义成员)
1#coding:
utf-8
3classTestClass:
4defmethod1(self):
5print("
方法1"
7defmethod2(self):
8print("
方法2"
10TestClass.method2=method2
12test=TestClass()
13test.method1()#方法1
14test.method2()#方法2
MetaProgramming(元编程)
1TestClass=type("
TestClass"
(object,),{
2"
say"
lambdaself:
print("
你好啊"
3})
5test=TestClass()
6test.say()
1defgetter(name):
2defgetterMethod(self):
3returnself.__getattribute__(name)
4returngetterMethod
6defsetter(name):
7defsetterMethod(self,value):
8self.__setattr__(name,value)
9returnsetterMethod
11classTestClass:
12getName=getter("
13setName=setter("
15test=TestClass()
16test.setName("
段光伟"
17print(test.getName())
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 学习 笔记