Python全栈开发day9,,一、面向对象进阶  


一、面向对象进阶

  1.利用python反射查看面向对象成员

  对于对象:反射既可以找对象,类的成员

  对于类:反射只能找类中的成员

    技术分享

  2.利用反射操作模块(查找类,创建对象,查找对象中字段)

123456789#!/bin/env python# -*- coding:utf-8 -*-moudel = __import__(‘lianxi‘,fromlist=True) # 导入模块c_name = getattr(moudel,‘foo‘) # 到模块中查找类obj = c_name(‘wangxiang‘) # 根据类创建对象val = getattr(obj,‘name‘) # 到对象中找字段的值print(val)C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lx3.pywangxiang

  3.类的静态字段

123456789#!/bin/env python# -*- coding:utf-8 -*-class foo:country = ‘中国‘ # 静态字段(将每个对象中都重复的内容放在类中,保存一份)def __init__(self, name):self.name = name # 普通字段def shaw(self): # 普通方法print(‘I am %s‘ % name)

  注意:

  类和对象都可以访问:静态字段,静态方法,普通字段,类方法,类的方法

  推荐:

  1、谁的成员谁访问

  类的成员,用类来访问

  对象的成员,用对象来访问

  除了类中的方法(不要用类去访问类中的方法)

 2.通过类访问:静态字段和静态方法,类方法。通过对象访问:普通字段,类的方法

  4、类的静态方法

    静态方法用类来访问

1234567891011121314151617#!/bin/env python# -*- coding:utf-8 -*-class foo:country = ‘中国‘ # 静态字段(将每个对象中都重复的内容放在类中,保存一份)def __init__(self, name):self.name = name # 普通字段@staticmethoddef test(arg1,arg2): # 静态方法,可以传递任意参数print(‘test %s %s‘%(arg1,arg2))def shaw(self): # 普通方法print(‘I am %s‘ % name)foo.test(‘alices‘,‘sam‘) # 通过类执行静态方法C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lianxi.pytest alices sam

  5.类方法

1234567891011121314#!/bin/env python# -*- coding:utf-8 -*-class foo:country = ‘中国‘ # 静态字段(将每个对象中都重复的内容放在类中,保存一份)def __init__(self, name):self.name = name # 普通字段@classmethod # 类方法,其中cls参数代表当前类名(这个参数必须要有)def acc(cls):print(‘acc‘,cls)foo.acc()C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lianxi.pyacc <class ‘__main__.foo‘> # cls即类名

  6python类特性

    获取值

1234567891011121314151617181920212223#!/bin/env python# -*- coding:utf-8 -*-class foo:def __init__(self,name):self.name = namedef start(self):temp = ‘%s sb‘% self.namereturn temp@property # python特性,将方法伪造成一种字段(执行时,无需加括号)def end(self):temp = ‘%s sb‘%self.namereturn tempobj = foo(‘sam‘)ret = obj.start()val = obj.end # 执行时,无需加括号(即不能加参数)print(ret)print(val)C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lx3.pysam sbsam sb

    设置数值:

    技术分享

  7.面向对象小结:

  面向对象三大特性:封装,继承,多态

  面向对象成员:

  字段:静态字段(每个对象都有一份),普通字段(每个对象都是不同的数据)

  方法:静态方法(无需使用对象封装的内容),类方法(和静态方法相同,会自动添加类名),普通方法(使用对象中的数据)

  特性:普通特性(将方法伪造成字段

  快速判断谁执行:

  self--->对象调用

  无self--->类调用

  8python成员修饰符

  成员修饰符:公有和私有

  私有内容,在类外部无法调用(包括其子类),只能在当前class内部调用

123456789101112class foo:va = ‘vava‘__vale = ‘vale‘ # 私有内容,在外部无法调用(包括子类),只能在当前class内部调用def __init__(self,name):self.__name = namedef start(self):print(foo.__vale)obj = foo(‘sam’)obj.start()

  Python外部访问私有内容(不推荐):

1234567891011121314#!/bin/env python# -*- coding:utf-8 -*-class foo:va = ‘vava‘__vale = ‘vale‘def __init__(self):passdef start(self):print(foo.__vale)obj = foo()print(obj._foo__vale)

  9Python面向对象中特殊方法:

  __init__构造方法;封装普通字段

  __del__析构方法;解释器销毁对象的时候,自动调用__del__

  __call__如下图:

    技术分享

  __getitem__

  __setitem__

  __delitem__

    技术分享

    上图中:

  ret[1:3]--->同样执行__getiteam__方法(类型为:slice)

  ret[1:3]=[11,22,33]--->执行__setitem方法(类型为:slice)

  __dict__查看对象中所有的字段(查看类中所有的成员)

  __iter__

12345678class foo:def __iter__(self):yield 1obj = foo()for i in obj: # 如果执行for对象时,自动会执行对象的iter方法(生成器)print(i)C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lx3.py1

二、Python异常

简单例子:(python2.7)

123456try:name = ‘shaw‘name_list = [‘shaw‘,‘sam‘,‘alex‘]print name_list[4]except IndexError,ERROR:print ERROR # 程序没有崩溃,还可以继续做其他事情

常见python异常:

    AttributeError试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x

    IOError输入/输出异常;基本上是无法打开文件

    ImportError无法引入模块或包;基本上是路径问题或名称错误

    IndentationError语法错误(的子类);代码没有正确对齐(抓不住)

    IndexError下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

    KeyError试图访问字典里不存在的键

    KeyboardInterruptCtrl+C被按下

    NameError使用一个还未被赋予对象的变量

    SyntaxErrorPython代码非法,代码不能编译(个人认为这是语法错误,写错了)抓不住

    TypeError传入对象类型与要求的不符合

    UnboundLocalError试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它

    ValueError传入一个调用者不期望的值,即使值的类型是正确的

  完整异常结构:

123456789101112try:# 主代码块passexcept keyError as e:# 出现异常时,执行该块passelse:# 主代码块执行完毕,执行该块passfinally:# 无论异常与否,最终执行该块pass

  自定义异常:

12345678try:print(123)raise Exception(‘出错了...‘) # 主动抛出自定义异常except Exception as e:print(e)C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lx3.py123出错了..

  技术分享

Python全栈开发day9

相关内容

    暂无相关文章

评论关闭