Python全栈开发day8
一、python生成/迭代器
yiled生成数据

python迭代器, 访问数据(通过next一次一次去取)
二、反射
通过字符串的形式,导入模块
通过字符串的形式,到模块中,寻找指定的函数,并执行
实质:以字符串的形式,到对象中,操作(更改,删除等)其方法(或叫做操作成员)
__import__ 用于以字符串的形式寻找对象
getattr() 用于以字符串的形式去某个对象中寻找东西(函数,变量等)
hasattr() 用于以字符串的形式去某个对象中判断东西(函数,变量等)是否存在,存在返回True
setattr(模块名,变量名,变量值) 用于以字符串的形式去某个对象中添加东西(函数,变量等)(仅仅在内存中操作,源文件内容不变)
delattr() 用于以字符串的形式去某个对象中删除东西(函数,变量等)(仅仅在内存中操作,源文件内容不变)
自定义模块:
|
1
2
3
4
5
6
7
8
9
|
#!/bin/env python# -*- coding:utf-8 -*-# 自定义模块,名称:lianxiname = 'shaw'def s1(): return 's1 函数'def s2(): return 's2 函数' |
导入模块并执行:(方法-)
|
1
2
3
4
5
6
7
8
|
#!/bin/env python# -*- coding:utf-8 -*-import lianxi as lxret = lx.s1()print(ret)###### 结果 ########C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lianxi2.pys1 函数 |
导入模块并执行:(方法二)通过字符串的形式,导入模块
|
1
2
3
4
5
6
7
8
9
10
|
#!/bin/env python# -*- coding:utf-8 -*-shuru = input('请输入模块名称:')lx = __import__(shuru) # 相当于:import lianxi as lxret = lx.s1()print(ret)###### 结果 ########C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lianxi2.py请输入模块名称:lianxis1 函数 |
导入模块并执行:(方法三:反射)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/env python# -*- coding:utf-8 -*-shuru = input('请输入模块名称:')# 导入多级模块方法# __import__('time.time',fromlist=True) 相当于from time import timelx = __import__(shuru)hansh = input('请输入函数名:')target_func = getattr(lx,hansh) # 到模块中找到函数名,相当于上面的 lx.s1ret = target_func() # 执行函数print(ret)######## 结果 ########C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lianxi2.py请输入模块名称:lianxi请输入函数名:s1s1 函数 |
函数中找到东西
|
1
2
3
4
5
6
7
|
#!/bin/env python# -*- coding:utf-8 -*-shuru = input('请输入模块名称:')lx = __import__(shuru)hansh = input('请输入函数名:')target_func = getattr(lx,'name',None) # 到模块中找到变量,’None’用于如果没找到,返回的值(防止报错)print(target_func ) |
反射的应用:web框架路由系统
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/bin/env python# -*- coding:utf-8 -*-def login(): return 'login'def logout(): return 'logout'######## index #########!/bin/env python# -*- coding:utf-8 -*-from exam.lib import accurl = input('请输入url:')ret = url.split('/')[-1]if hasattr(acc,ret): r = getattr(acc,ret) s = r() print(s)else: print('404') |
三、面向对象基础
初始面向对象
|
1
2
3
4
5
6
7
8
9
10
11
12
|
class shaw: def f1(self): return 'f1' def f2(self, args): return args obj = shaw()ret = obj.f2('hah')print(ret)C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lianxi.pyhah |
1、面向对象不是所有情况都适用
2、面向对象编程过程:
a.定义类
b.根据类创建对象(创建一个类的实例)(操作这一步时,实质是执行了该类的__init__方法)

c.适用对象执行类中方法

3、self 为形式参数,由python内部自动传递
obj = shaw()
obj.f2(‘haha’)
参数传递流程为:
self==obj,args==’hah’
即self就为创建的对(实例)
4.面向对象特性一:封装
|
1
2
3
4
5
6
7
8
9
10
11
|
class shaw: def f1(self): return self.args # self.args ==>obj.args 称为普通字段,存在于对象中 def f2(self): return self.args# obj.args = 'www.cnblogs.com/opsedu' 这是封装的一种方式obj = shaw()obj.args = 'www.cnblogs.com/opsedu' # 通过对象封装参数,不用每个方法中都写具体参数ret = obj.f1()print(ret) |
主流的封装方式:通过构造函数(方法)封装:

|
1
2
3
4
5
6
7
8
9
10
11
12
|
class shaw: def __init__(self): self.args = 'www.cnblogs.com/opsedu' def f1(self): return self.args obj = shaw()ret = obj.f1()print(ret)C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lianxi.pywww.cnblogs.com/opsedu |
注意:
解释器销毁对象的时候,自动调用__del__(析构方法)
封装适用场景,当同一类型的方法,具有相同参数时,直接封装到对象即可
5.面向对象特性二:继承

当派生类和基类中,同时存在某个方法,优先使用派生类方法
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/bin/env python# -*- coding:utf-8 -*-class shengwu: def chifan(self): print(self.name + '吃饭') def paobu(self): print(self.name + '不爱跑步')class renlei(shengwu): def __init__(self, name): self.name = name def paobu(self): print(self.name + '爱跑步')ret = renlei('李林')ret.paobu()C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lx3.py李林爱跑步 |
Python类可以同时继承多个类(c#/java不可以)
|
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
|
#!/bin/env python# -*- coding:utf-8 -*-class shengwu: def chifan(self): print(self.name + '吃饭') def paobu(self): print(self.name + '不爱跑步')# relei类class renlei: def chuanyi(self): print(self.name + '穿衣服') def paobu(self): print(self.name + '不想跑步')# boy类class boy(shengwu, renlei): # 继承多个类,继承优先级,从左到右() def __init__(self, name): self.name = name def paobu(self): print(self.name + '爱跑步')ret = boy('李林')ret.chifan()ret.chuanyi()ret.paobu()######## 结果 ########C:\Python35\python.exe H:/PyCharm/Python/PY_learn/lx3.py李林吃饭李林穿衣服李林爱跑步 |

执行父类的构造方法:

Python全栈开发day8的更多相关文章
- python全栈开发-Day8 函数基础
python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需 ...
- 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)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
随机推荐
- 单例实现c++
#include <iostream> using namespace std; class Singleton { public: static Singleton *GetInstan ...
- 【学】React的学习之旅4-添加事件(onChange)
实现联动绑定,在文本框中输入内容的同时,后面的span里内容跟着一起变化: onChange(),一旦触发一次变动,就执行某个函数: 既然已经在getInitialState属性里申明了一个变量inp ...
- left join 取一条数据
产品生产过程中要记录产品在制作过程中的不良历史,即使在一个工序,也可以产生多条不良历史记录,所有的不良信息保存在B表中.假设产品在打包工序,存放打包工序成品参数记录的表A,数据是唯一的.但在打包过程中 ...
- Python基础语法(二)
类中的方法定义前如果有 @staticmethod 则此方法通过类名调用,如:dict.fromkeys() : 如果没有,则此方法通过对象调用 三元运算 name=值1 if 条件 else 值2 ...
- <网页web工作面试题>
磨刀不误砍柴工,在百忙之余的中午休息时,我录入一下我的面试题,把基础的知识重新温故,稳固! 1.块级元素和行内元素都有哪些? 答:块级元素:div,form,fildset等 行内元素:hr,p,fo ...
- Mybatis获取插入记录的自增长ID(转)
1.在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名,而不是表格的字段名. <ins ...
- spark1.3编译过程中遇到的一个坑
在编译spark1.3.0时: export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m&q ...
- 标准C++中的string类的用法总结
标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...
- 针对“Can't download driver to specified address”错误
当用h-flasher检测flash-id时,可能会出现上述错误,个人认为当提示这个错误时,一般来说是sdram出现了问题,可以看看sdram有没有虚焊,或者周围的电阻电容是否正确. 在后来调板子的过 ...
- 高性能网络编程(一)----accept建立连接
编写服务器时,许多程序员习惯于使用高层次的组件.中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点.希望应用代码完全不关 ...