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 -*- # 自定义模块,名称:lianxi name = '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 lx ret = lx.s1() print (ret) ###### 结果 ######## C:\Python35\python.exe H: / PyCharm / Python / PY_learn / lianxi2.py s1 函数 |
导入模块并执行:(方法二)通过字符串的形式,导入模块
1
2
3
4
5
6
7
8
9
10
|
#!/bin/env python # -*- coding:utf-8 -*- shuru = input ( '请输入模块名称:' ) lx = __import__ (shuru) # 相当于:import lianxi as lx ret = lx.s1() print (ret) ###### 结果 ######## C:\Python35\python.exe H: / PyCharm / Python / PY_learn / lianxi2.py 请输入模块名称:lianxi s1 函数 |
导入模块并执行:(方法三:反射)
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 time lx = __import__ (shuru) hansh = input ( '请输入函数名:' ) target_func = getattr (lx,hansh) # 到模块中找到函数名,相当于上面的 lx.s1 ret = target_func() # 执行函数 print (ret) ######## 结果 ######## C:\Python35\python.exe H: / PyCharm / Python / PY_learn / lianxi2.py 请输入模块名称:lianxi 请输入函数名:s1 s1 函数 |
函数中找到东西
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 acc url = 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.py hah |
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.py www.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)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
随机推荐
- XML编程知识点总结
DOM和SAX DOM的全称是Document Object Model,也即文档对象模型.基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合,应用程序挣是通过对这个对象模型的操作,来实 ...
- hammerJs-v2.0.4详解
一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqer ...
- 同时使用Junit4的@Parameterized参数化测试和Spring容器
转载:http://www.jianshu.com/p/d191fe54915f 整合Spring容器 @SpringApplicationConfiguration(classes = Applic ...
- 超链接实现post方式提交
思路:如果想要超链接实现post方式提交,必须借助表单.下面得两种方式,一种是借助显示的form表单,一种是借助隐式的form表单方式一:将超链接放到一个form表单中,或者超链接本身就在一个form ...
- nodejs express环境配置
下载安装最新版nodejs,安装完毕运行命令 node -v 查看版本以及是否安装成功. 然后安装express插件,命令 npm install -g express (全局) , express ...
- 【node】使用gulp来维护网站项目
基本参照此:http://www.gulpjs.com.cn/docs/getting-started/ 1.电脑需要安装好nodejs,安装好的时候会自带npm 2.在命令行中执行命令安装gulp ...
- oracle免客户端安装 plsql连接
开发的过程中,往往没有必要在自己的电脑上安装oracle,也实在太大了. 这里介绍一种使用plsql连接oracle的方法,类似于navicat之连接mysql. 先下载plsql,进行安装,这里提供 ...
- java socket 通讯
(转)http://blog.csdn.net/xn4545945/article/details/8098646
- sqlce中不支持sp_rename修改表名
The sp_rename procedure is not avialable in SQL CE! In Sql Server 2005 Management Studio you have to ...
- LPC2478调试___ads常见错误分析
进行ADS外部RAM进行仿真调试过程中,出现常见错误“entry point lies outside the image" 原因为程序空间超出范围,需要修改一个参数. 解决方法:首先在Z ...