2018.3.25学习笔记(成员修饰符、特殊成员、异常处理)
2018-03-25 18:30 冒牌权限 阅读(77) 评论(0) 收藏 举报双下划线修饰符,只能内部访问,外部无法访问
#!/usr/bin/env python # -*- coding:utf-8 -*- class Provice: __fuck = 'fuck'#双下划线修饰静态字段 @staticmethod def __test():#双下划线修饰静态方法 print('fuck you,man!') def __init__(self,a1,a2): self.__a1 = a1#双下划线修饰普通字段 self.a2 = a2 def func(self):#内部访问被双下划线修饰的成员 print(Provice.__fuck) print(self.__a1) Provice.__test() self.__func() def __func(self):#双下划线修饰普通方法 print('__func') obj = Provice('f','k') obj.func()#可以访问 print(obj.a2) # print(obj.a1)# # print(Provice.__fuck) # Provice.__test() # obj.__func() #可以看到被双下划线修饰过的成员均无法外部访问 class cl(Provice): def func_cl(self): # print(self.__a1)#可以看到继承也无法访问 self.func()#通过基类的方法才能访问 obj2 = cl('000',"111") obj2.func_cl()
特殊成员__call__()
#!/usr/bin/env python # -*- coding:utf-8 -*- class FC: def __init__(self): print('init') def __call__(self, *args, **kwargs): print('call') FC()()#FC()实例化一个对象,输出init,对象后面加个(),则会执行该类的__call__()方法
特殊成员__getitem__()、__setitem__()、__delitem__()
#!/usr/bin/env python # -*- coding:utf-8 -*- class FC: def __init__(self): print('init') def __getitem__(self,item): print(item) def __setitem__(self, key, value): print(key,value) def __delitem__(self, key): print(key) ret = FC() FC()[120]# FC()实例化一个对象,输出init,对象后面加个[],则会执行该类的__getitem__()方法 ret[120] = 1234567# 120赋值给key,1234567赋值给value del ret[120]# 120赋值给key
特殊成员__dict__获取对象的成员
#!/usr/bin/env python # -*- coding:utf-8 -*- class FC: def func(self): pass #__dict__获取对象的成员 obj = FC() print(obj.__dict__) print(FC.__dict__)
特殊成员__iter__()
#!/usr/bin/env python # -*- coding:utf-8 -*- class FC: def __iter__(self): yield '呵呵' yield '什么鬼' obj = FC() for i in obj:#本质上,for对象时,是去执行对象的__iter__()方法 print(i)
异常处理
#!/usr/bin/env python # -*- coding:utf-8 -*- inp = input('请输入URL后半段:') mods,funcs = inp.split('/') try:#下列代码如果出错,则停止执行,跳转至except import_mods = __import__('test.' + mods,fromlist = True) if hasattr(import_mods,funcs): print(getattr(import_mods,funcs)()) else: print('404') except IndexError as error:#创建一个Exception类的对象error,IndexError捕获索引错误,如果没匹配则匹配下一个except print('索引错误') except Exception as error:#创建一个Exception类的对象error,Exception可以捕获任何错误,还有很多可以用来捕获特定错误的 print('无此模块') print(error)
一个完整的异常处理过程
#!/usr/bin/env python # -*- coding:utf-8 -*- try: pass except IndexError as error:#如果try里边的代码块出错,跳转至这里,执行except里的代码块 pass except Exception as error:#如果上面的except没有匹配成功,则跳转至这里,执行except里的代码块 pass else:#如果try没有出错,则执行else里的代码块 pass finally:#这个可以单独拿出来看,无论try出错与否,执行完上面的except/else后都要来执行finally pass
浙公网安备 33010602011771号