Python全栈开发day9
一、面向对象进阶
1.利用python反射查看面向对象成员
对于对象:反射既可以找对象,类的成员
对于类:反射只能找类中的成员

2.利用反射操作模块(查找类,创建对象,查找对象中字段)
|
1
2
3
4
5
6
7
8
9
|
#!/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.类的静态字段
|
1
2
3
4
5
6
7
8
9
|
#!/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、类的静态方法
静态方法用类来访问
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/bin/env python# -*- coding:utf-8 -*-class foo: country = '中国' # 静态字段(将每个对象中都重复的内容放在类中,保存一份) def __init__(self, name): self.name = name # 普通字段 @staticmethod def 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.类方法
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/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即类名 |
6.python 类特性
获取值
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/bin/env python# -*- coding:utf-8 -*-class foo: def __init__(self,name): self.name = name def start(self): temp = '%s sb'% self.name return temp @property # python特性,将方法伪造成一种字段(执行时,无需加括号) def end(self): temp = '%s sb'%self.name return 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 ---> 类调用
8.python成员修饰符
成员修饰符:公有和私有
私有内容,在类外部无法调用(包括其子类),只能在当前class内部调用
|
1
2
3
4
5
6
7
8
9
10
11
12
|
class foo: va = 'vava' __vale = 'vale' # 私有内容,在外部无法调用(包括子类),只能在当前class内部调用 def __init__(self,name): self.__name = name def start(self): print(foo.__vale)obj = foo(‘sam’)obj.start() |
Python外部访问私有内容(不推荐):
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/env python# -*- coding:utf-8 -*-class foo: va = 'vava' __vale = 'vale' def __init__(self): pass def start(self): print(foo.__vale)obj = foo()print(obj._foo__vale) |
9.Python面向对象中特殊方法:
__init__ 构造方法;封装普通字段
__del__ 析构方法;解释器销毁对象的时候,自动调用__del__
__call__ 如下图:

__getitem__
__setitem__
__delitem__

上图中:
ret[1:3] ---> 同样执行__getiteam__方法(类型为:slice)
ret[1:3] = [11,22,33] ---> 执行__setitem方法(类型为:slice)
__dict__ 查看对象中所有的字段(查看类中所有的成员)
__iter__
|
1
2
3
4
5
6
7
8
|
class 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)
|
1
2
3
4
5
6
|
try: 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 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)抓不住
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的
完整异常结构:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
try: # 主代码块 passexcept keyError as e: # 出现异常时,执行该块 passelse: # 主代码块执行完毕,执行该块 passfinally: # 无论异常与否,最终执行该块 pass |
自定义异常:
|
1
2
3
4
5
6
7
8
|
try: print(123) raise Exception('出错了...') # 主动抛出自定义异常except Exception as e:print(e)C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lx3.py123出错了.. |

Python全栈开发day9的更多相关文章
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域
一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
- Python全栈开发【模块】
Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...
- Python全栈开发【基础四】
Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...
- Python全栈开发【基础三】
Python全栈开发[基础三] 本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...
- Python全栈开发【基础二】
Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...
- Python全栈开发【基础一】
Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
随机推荐
- Elasticsearch mysql 增量同步 三表联合 脚本
在上一篇中简略的说了一下es同步数据脚本的大致情况,但是实际情况里肯定不会像上一篇里面的脚本那么简单.比如目前我就有三张表,两张实体表,一张关联表.大致实现如下: bin目录建立一个statefile ...
- ubuntu 彻底卸载软件
找到此软件名称,然后sudo apt-get purge ......(点点为为程序名称),purge参数为彻底删除文件,然后sudo apt-get autoremove,sudo apt-get ...
- Android学习笔记(十)
Android控件——ListView ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时 屏幕上原有的数据则会滚动出屏幕. 1.ListView的简单用法 新建一个Lis ...
- mysql5.5字符集设置的一点变化(对于中文乱码问题,需要设置mysql字符集)
工作中因为字符集问题没少头疼,还犯过一次错误,还好拯救及时,没有发生重大事故,唉,弄清楚点还是非常有必要的: 例如我的工作环境为CTR+redhat5+mysql5.5 在导入sql语句的时候必须要注 ...
- Python忽略warning警告错误
python开发中经常遇到报错的情况,但是warning通常并不影响程序的运行,而且有时特别讨厌,下面我们来说下如何忽略warning错误. 在说忽略warning之前,我们先来说下如何主动产生war ...
- Java中遍历Map集合的四种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- SSH配置免密码登陆
1.使用SSH-keygen,然后一路回车使之生成id_rsa何id_rsa.pub文件,id_rsa.pub为公匙文件. 2.使用命令:cat ~/.ssh/id_rsa.pub >> ...
- WinForm控件TreeView 只部分节点显示 CheckBox
WinForm控件TreeView 只部分节点显示 CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示check ...
- W5200移植W5500驱动教程
说明,移植例程为我按照这个教程移植的例程,测试通过.工程模板为我经常使用的一个w5500模板,可以在里面直接添加文件编程.1. 将driver文件夹中W5500文件夹和所有.c文件复制到工程/sour ...
- DAO模式设计步骤
1.DAO 全称是data access object,数据库访问对象,主要的功能就是用于进行数据操作的,在程序的标准开发架构中属于数据层的操作. 2.分成架构 企业分层架构 客户层:因为现在都采用了 ...