python笔记22(面向对象课程四)
今日内容
- 讲作业
- 栈
- 顺序查找
- 可迭代对象
- 约束 + 异常
- 反射
内容详细
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(面向对象课程四)的更多相关文章
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...
- Python:笔记(3)——面向对象编程
Python:笔记(3)——面向对象编程 类和面向对象编程 1.类的创建 说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加. 2.构造函数 构造函数的功能毋庸置疑, ...
- 9.Python笔记之面向对象高级部分
类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...
- Python入门之面向对象编程(四)Python描述器详解
本文分为如下部分 引言——用@property批量使用的例子来引出描述器的功能 描述器的基本理论及简单实例 描述器的调用机制 描述器的细节 实例方法.静态方法和类方法的描述器原理 property装饰 ...
- Python笔记之面向对象
1.类和对象 #create a class class fruit: def say(self): print "hello, python" if __name__ == &q ...
- python学习笔记_week6_面向对象
面向对象 介绍(特性(class.object--->封装.继承,多态)).--->世界万物,皆可分类:世界万物,皆可对象 只要是对象,就肯定属于某种品类:只要是对象,就肯定有属性 你是上 ...
- python全栈开发 * 22 面向对象 知识点汇总 * 180703
22 面向对象 -----属性,类方法,静态方法,反射一.属性1.属性的定义:将方法伪装成属性,虽然在代码层面上没有任何高深之处,但让其看起来更合理. (类似于属性的方法)class Person: ...
- python学习笔记(10):面向对象
一.类和实例 1.类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 2.对象:通过类定义的数据结构实例.对象包括两个数据成员( ...
- python笔记 - day7-1 之面向对象编程
python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...
随机推荐
- # 曹工说Spring Boot源码(10)-- Spring解析xml文件,到底从中得到了什么(context:annotation-config 解析)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- Microsoft Visual Studio提示正忙如何解决
打开项目的时候会一直提示正在加载,然后卡死,点击VS界面即出现下如图- 如图: 解决方法: 1.打开项目 找到一个叫vs的文件夹, 2.找到一个后缀是.suo的文件 把它删掉 3.关闭VS进程 重新打 ...
- git 删除和复制远程分支 储藏
不常用到命令经常查,特别记录,方便自己开箱即用. 1. 删除本地分支 git branch -D <dev> 2. 删除远程分支 git push origin --delete < ...
- 对标Eureka的AP一致性,Nacos如何实现Raft算法
一.快速了解Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它. 为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取(le ...
- 基于iTextSharp的PDF操作(PDF打印,PDF下载)
基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...
- XML学习笔记——关于XML解析器
本篇文章基于W3C而写 在Firefox及其他浏览器中的XML解析器(除IE) var xmlDoc=document.implementation.createDocument("&quo ...
- idea中当前模块资源目录上显示属于其他模块
一.错误的2个显示 1.错误显示 src/main目录下的java和resources本来属于cloud-consumer-dept-feign模块 但是在src/main/java却是显示src/m ...
- Rainbow Plan团队项目第一次作业——项目计划
团队项目--Rainbow Plan英语学习App 1.团队简介 1.1团队名称:Rainbow Plan (彩虹计划) 1.2团队成员: 队员学号 队员姓名 201731024235 何继武(组长) ...
- Intellij IDEA中将打开的代码与类文件进行关联
Intellij IDEA中在导航栏打开多个类时,如何快速定位到某个类所在的目录? 经过研究,可以通过以下设置完成: 设置完成后,点击导航栏中的类,左边的Project导航就可以快速定位到该类所在的目 ...
- CSS-17-页面布局
页面布局: 静态布局: 静态布局:元素不变的布局. 布局特点:缩小后内容被遮挡,拖动滚动条显示布局 设计方法: PC:居中布局,所有样式使用绝对宽度和高度 移动设备:另外建立移动网站,以m.域名为域名 ...