一、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的更多相关文章

  1. python全栈开发-Day8 函数基础

    python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需 ...

  2. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  3. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  4. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  5. Python全栈开发【基础四】

    Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...

  6. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  7. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  8. Python全栈开发【基础一】

    Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...

  9. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序,编译后出现以下问题 .\obj\pro1.axf: Error: L6218E: Undefined symbol FLASH_PrefetchBuf ...

  2. Inno Setup制作安装包的几个问题

    1. 卸载时,如何判断应用程序是否运行    InnoSetup 提供变量AppMutex,用来保存应用程序的Mutex名称.现在很多应用程序都是唯一实例运行.这样避免配置文件被错误修改以及其他很多衍 ...

  3. Hibernate5.2之一对一主键关联(四)

                                                      Hibernate5.2之一对一主键关联(四) 一.简介 一对一关联关系分为两种:a.主键关联:b. ...

  4. Actionscript Flash Event.ENTER_FRAME 延迟间隔非常大 并且 pre-render 耗时非常严重

    我遇到的问题是代码中不断的添加一个图标到舞台上,而且这个图标非常小,所以从内存也看不出什么问题. 但是由于舞台物件太多了,并且不断添加,导致渲染耗时严重. 而且这种错误,开发工具并不会报错,也不属于死 ...

  5. Gson的使用

    GSON:是Google开发的Java API,用于转换Java对象和Json对象 <dependency> <groupId>com.google.code.gson< ...

  6. 采用CAS原理构建单点登录

    企业的信息化过程是一个循序渐进的过程,在企业各个业务网站逐步建设的过程中,根据各种业务信息水平的需要构建了相应的应用系统,由于这些应用系统一般是在不同的时期开发完成的,各应用系统由于功能侧重.设计方法 ...

  7. Cookie实现商品浏览记录--方式一:Java实现

    方式一:Java代码方式实现:此种方式实现思路较为顺畅.难点在于,如何实现将最近浏览的产品显示在最前面:实现方式是借助LinkedList提供的remove()方法,先将此id从列表中移除,然后再借助 ...

  8. 转ASP.NET1.1请求队列限制

    在教务web的选课的维护中,经常面临asp.net1.1报错,在客户端跳转到用户自定义页面,在服务器端可以看到如下错误信息: “/”应用程序中的服务器错误. 服务器太忙 说明: 执行当前 Web 请求 ...

  9. 区分LocalStorage和偏好数据

    偏好数据类似于web.config或者session,cookie之类的值,一般用于保存一些状态值,不推荐大量的数据通过此方式存储 Local Storage不仅可以寸字符串,还可以寸JSON对象

  10. C#设计模式——解释器模式(Interpreter Pattern)

    一.概述 在软件开发特别是DSL开发中常常需要使用一些相对较复杂的业务语言,如果业务语言使用频率足够高,且使用普通的编程模式来实现会导致非常复杂的变化,那么就可以考虑使用解释器模式构建一个解释器对复杂 ...