今日内容

  • 讲作业

    • 顺序查找
  • 可迭代对象
  • 约束 + 异常
  • 反射

内容详细

1.作业

1.1 代码从上到下执行

print('你好')

def func():
pass func()
class Foo:
X = 1 def func(self):
pass
Foo.X
class Foo:
print('你好')
def func(self):
pass
class Foo:
x = 1
def func(sef):
pass class Meta:
y = 123
def show(self):
pass
class Foo:
print('你')
x = 1
def func(sef):
pass class Meta:
print('好')
y = 123
def show(self):
pass

1.2 栈

class Stack(object):
"""
后进先出
"""
def __init__(self):
self.data_list = [] def push(self, val):
"""
向栈中压入一个数据(入栈)
:param val:
:return:
"""
self.data_list.append(val) def pop(self):
"""
从栈中拿走一个数据(出栈)
:return:
"""
return self.data_list.pop()

2.可迭代对象

表象:可以被for循环对象就可以称为是可迭代对象: "x" [11,2] {}...

class Foo:
pass obj = Foo()

如何让一个对象变成可迭代对象?

在类中实现__iter__方法且返回一个迭代器(生成器)

class Foo:
def __iter__(self):
return iter([1,2,3,4]) obj = Foo() class Foo:
def __iter__(self):
yield 1
yield 2
yield 3 obj = Foo()

记住:只要能被for循环就是去看他内部的iter方法。

3.约束

# 约束字类中必须写send方法,如果不写,则调用时候就报抛出 NotImplementedError
class Interface(object):
def send(self):
raise NotImplementedError() class Message(Interface):
def send(self):
print('发送短信')z class Email(Interface):
def send(self):
print('发送邮件')
class Message(object):

    def msg(self):
print('发短信') def email(self):
print('邮件') def wechat(self):
print('微信') obj = Message()
obj.msg()
obj.email()
obj.wechat()
class BaseMessage(object):
def send(self,a1):
raise NotImplementedError('字类中必须有send方法') class Msg(BaseMessage):
def send(self):
pass class Email(BaseMessage):
def send(self):
pass class Wechat(BaseMessage):
def send(self):
pass class DingDing(BaseMessage):
def send(self):
print('钉钉') obj = Email()
obj.send()

4.反射

根据字符粗的形式去某个对象中 操作 他的成员。

  • getattr(对象,"字符串") 根据字符粗的形式去某个对象中 获取 对象的成员。

    class Foo(object):
    def __init__(self,name):
    self.name = name
    obj = Foo('alex') # 获取变量
    v1 = getattr(obj,'name')
    # 获取方法
    method_name = getattr(obj,'login')
    method_name()
  • hasattr(对象,'字符串') 根据字符粗的形式去某个对象中判断是否有该成员。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    from wsgiref.simple_server import make_server class View(object):
    def login(self):
    return '登陆' def logout(self):
    return '等处' def index(self):
    return '首页' def func(environ,start_response):
    start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
    #
    obj = View()
    # 获取用户输入的URL
    method_name = environ.get('PATH_INFO').strip('/')
    if not hasattr(obj,method_name):
    return ["sdf".encode("utf-8"),]
    response = getattr(obj,method_name)()
    return [response.encode("utf-8") ] # 作用:写一个网站,用户只要来方法,就自动找到第三个参数并执行。
    server = make_server('192.168.12.87', 8000, func)
    server.serve_forever()
  • setattr(对象,'变量','值') 根据字符粗的形式去某个对象中设置成员。

    class Foo:
    pass obj = Foo()
    obj.k1 = 999
    setattr(obj,'k1',123) # obj.k1 = 123 print(obj.k1)
  • delattr(对象,'变量') 根据字符粗的形式去某个对象中删除成员。

    class Foo:
    pass obj = Foo()
    obj.k1 = 999
    delattr(obj,'k1')
    print(obj.k1)

python一切皆对象

  • py文件
  • 对象

python一切皆对象,所以以后想要通过字符串的形式操作其内部成员都可以通过反射的机制实现。

5. 模块:importlib

根据字符串的形式导入模块。

#from utils import redis
import importlib
#用字符串的形式导入模块。
redis=importlib.import_module('utils.redis')
getattr(redis,'func')() 模块 = importlib.import_module('utils.redis')
import importlib
path='utils.mongo.func'#mongo.py,utils为目录名称
module_path,func_name=path.rsplit('.',maxsplit=1)
module_object=importlib.import_module(module_path)
getattr(module_object,func_name)()

python笔记22(面向对象课程四)的更多相关文章

  1. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  2. Python:笔记(3)——面向对象编程

    Python:笔记(3)——面向对象编程 类和面向对象编程 1.类的创建 说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加. 2.构造函数 构造函数的功能毋庸置疑, ...

  3. 9.Python笔记之面向对象高级部分

    类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...

  4. Python入门之面向对象编程(四)Python描述器详解

    本文分为如下部分 引言——用@property批量使用的例子来引出描述器的功能 描述器的基本理论及简单实例 描述器的调用机制 描述器的细节 实例方法.静态方法和类方法的描述器原理 property装饰 ...

  5. Python笔记之面向对象

    1.类和对象 #create a class class fruit: def say(self): print "hello, python" if __name__ == &q ...

  6. python学习笔记_week6_面向对象

    面向对象 介绍(特性(class.object--->封装.继承,多态)).--->世界万物,皆可分类:世界万物,皆可对象 只要是对象,就肯定属于某种品类:只要是对象,就肯定有属性 你是上 ...

  7. python全栈开发 * 22 面向对象 知识点汇总 * 180703

    22 面向对象 -----属性,类方法,静态方法,反射一.属性1.属性的定义:将方法伪装成属性,虽然在代码层面上没有任何高深之处,但让其看起来更合理. (类似于属性的方法)class Person: ...

  8. python学习笔记(10):面向对象

    一.类和实例 1.类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 2.对象:通过类定义的数据结构实例.对象包括两个数据成员( ...

  9. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

随机推荐

  1. Redis入门--1.安装Redis

    redis是什么? 是完全开源免费的,用c语言编写的,是一个单线程,高性能的(key/value)内存数据库,基于内存运行并支持持久化的nosql数据库 redis能干嘛? 主要是用来做缓存,但不仅仅 ...

  2. Java解析文件内容

    本文主要实现对.chk文件的解析,将其内容读出来,存入到一个Map中,文件内容实例为: A0500220140828.CHK A05002 |34622511 |373532879 |3 识别分隔符| ...

  3. 01-web自动化基础篇

    1.搭建环境 需要的环境 浏览器(Firefox/Chrome/IE…)-----选择Chrome Python Selenium Selenium IDE(如果用Firefox) FireBug.F ...

  4. C# 实现验证码识别,使用AspriseOCR.dll

    验证码(Captcha)基于十道安全栅栏, 为网页.App.小程序开发者打造立体.全面的人机验证,最大程度地保护注册登录.活动秒杀.点赞发帖.数据保护等各大场景下的业务安全.要做自动化脚本程序,就要能 ...

  5. 【红外DDE算法】数字细节增强算法的缘由与效果(我对FLIR文档详解)

    [红外DDE算法]数字细节增强算法的缘由与效果(我对FLIR文档详解) 1. 为什么红外系统中图像大多是14bit(甚至更高)?一个红外系统的性能经常以其探测的范围来区别,以及其对最小等效温差指标.首 ...

  6. [bzoj2120] [洛谷P1903] 数颜色

    Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...

  7. 为磁盘文件定义路由(Defining Routes for Disk Files) |对磁盘文件进行路由请求 |

  8. HTML5浏览器支持及兼容性处理

    1.现代的浏览器都支持HTML5. 2.所有浏览器不管是新的还是旧的对无法识别的元素会作为内联元素自动处理. 3.HTML5定义了8个HTML语义元素,所有这些元素都是块级元素,为了能让旧版本的浏览器 ...

  9. CAS的ABA问题详解

    CAS的ABA问题详解 ABA问题 在多线程场景下CAS会出现ABA问题,关于ABA问题这里简单科普下,例如有2个线程同时对同一个值(初始值为A)进行CAS操作,这三个线程如下 1.线程1,期望值为A ...

  10. 使用typescript改造koa开发框架

    强类型的 TypeScript 开发体验和维护项目上相比 JavaScript 有着明显的优势,那么对常用的脚手架进行改造也就势在必行了. 接下来开始对基于 koa 框架的 node 后端脚手架进行改 ...