2019-03-25-day018-面向对象
re模块
- 字符串匹配
- 列表 = findall(正则表达式,待匹配的字符串) 找所有
- 结果集 = search 找第一个,结果集.group()
- 结果集 = match 从第一个字符开始匹配,结果集.group()
- 编译结果 = compile(正则表达式) 编译 加快执行效率,节省时间
- 编译结果.findall
- 编译结果.finditer
- 编译结果.search
- 迭代器 = finditer(正则表达式,待匹配的字符串) 返回一个迭代器,节省空间
for i in 迭代器:i是一个结果集,通过i.group才能取到结果
- 替换后的字符串 = sub(正则,新的值,待匹配的字符串)(替换后的字符串,替换了多少次) =subn(正则,新的值,待匹配的字符串)
- 列表 = split(正则,待切割的字符串)
- 被切割的内容
- 如果正则是带分组的,那么保留被切掉的内容
- 如果正则是不带分组的,那么不保留被切掉的内容
- 被切割的内容
- 分组
- findall 会优先显示分组中的内容
- 取消分组优先 (?:正则)
- ret = search()
- ret.group(1) 获取第一组中的内容
- 分组命名
- (?P正则)
- 引用分组
- (?P=name)
- \1 \2
- 使用正则做匹配的时候,往往要匹配的东西很普通,容易和我们不需要的内容混在一起
- 我们就通过把不需要的东西也匹配出来 来把想要的内容放在分组中方便获取
面向对象
- 人
- 名字,血量,攻击力,性别
- 狗
- 名字,血量,攻击力,品种
属性很有可能是不统一
def Person(name,hp,ad,sex): # 模子
dic = {'name':name,'blood':hp,'attack':ad,'sex':sex}
def fight(dog): # 攻击 属于人
# 狗掉血,就是人的攻击力
dog['blood'] -= dic['attack']
print('%s打了%s,%s掉了%s血' % (dic['name'], dog['name'], dog['name'], dic['attack']))
dic['fight'] = fight
return dic
def Dog(name,hp,ad,kind):
dic = {'name': name, 'blood': hp, 'attack': ad, 'kind': kind}
def bite(person): # 咬 属于狗
person['blood'] -= dic['attack']
print('%s咬了%s,%s掉了%s血' % (dic['name'], person['name'], person['name'], dic['attack']))
dic['bite'] = bite
return dic
互相打
alex = Person('alex',20,1,'不详')
print(alex)
hei = Dog('小黑',3000,10,'哈士奇')
print(hei)
alex['fight'](hei)
hei['bite'](alex)
通过两个模子 捏出两个具体的角色
抽象 :只能知道有哪些属性
具体 :可以描述他的属性的值的
- 给两个特定的属于特定角色的方法 设置了他的使用范围
- 让其他角色不能随意调用属于固定角色的方法
- 先思考这个程序中有几个角色
- 然后描述这个角色 属性和动作
- 把这个属性和动作都装到一个角色中
- 面向对象编程
面向对象语法
- 对象 :具有具体的属性值的实际存在的例子 # 实例
- 类 :具有相同方法和属性的一类事物
def 函数:
pass
class Dog:
pass
class Dog:
变量 = 1000
变量2 = 'abc'
变量3 = [(1,2),(3,4)]
#查看类当中的变量,方法一
print(Dog.__dict__['变量'])
print(Dog.__dict__['变量2'])
print(Dog.__dict__['变量3'])
#查看方法二(常用)
print(Dog.变量)
print(Dog.变量2)
print(Dog.变量3)
#每一只狗都需要有自己的属性
class Dog: # 狗模子 -- 类
a = 1000 # 静态变量 这个类中的变量 是所有的对象共享的值
def __init__(self,name,hp,ad,sex):
print('执行我啦')
self.__dict__['name'] = name
self.__dict__['blood'] = hp
self.__dict__['ad'] = ad
self.__dict__['sex'] = sex
print(self.__dict__)
alex = Dog('alex',20,10,'不详') # 具体的狗 对象 实例化的过程
alex = Dog('alex',20,10,'不详')
print(alex.__dict__['name'])
print(alex.__dict__['blood'])
- 对象 也是实例
- 创建一个对象也是创建实例
- 实例化的过程 :
- 开辟了一块空间,创造了一个self变量来指向这块空间
- 调用init,自动传self参数,其他的参数都是按照顺序传进来的
- 执行init
- 将self自动返回给调用者
class Dog:
def __init__(self,name,hp,ad,kind): # 初始化方法
self.name = name # 实例变量 对象属性
self.blood = hp
self.ad = ad
self.type = kind
class Person:
a = 1000 # 静态变量
def __init__(self,name,hp,ad,sex): # 初始化方法
self.name = name # 实例变量 对象属性
self.blood = hp
self.ad = ad
self.sex = sex
def fight(self,dog): # 动态变量 方法
# 狗掉血,就是人的攻击力
dog.blood -= self.ad
print('%s攻击了%s,%s掉了%s点血'%(self.name,dog.name,dog.name,self.ad))
alex = Dog('alex',20,10,'不详') # alex 对象 实例
太白 = Person('太白',300,20,'male') # 太白 对象 实例
print(alex.blood)
太白.fight(alex) # Person.fight(太白,alex)
print(alex.blood)
- 类名可以调用所有定义在类中的名字
- 变量
- 函数名
- 对象名 可以调用所有定义在对象中的属性
- 在init函数中和self相关的
- 调用函数的,且调用函数的时候,会把当前的对象当做第一个参数传递给self
清晰一下面向对象的例子
class Dog:
def __init__(self,name,blood,ad,kind):
self.name = name # 向对象的内存空间中添加属性
self.hp = blood # 可以通过self在类的内部完成
self.ad = ad
self.kind = kind
hei = Dog('小黑',300,20,'哈士奇')
hua = Dog('小花',400,30,'萨摩耶')
print(hei.name)
print(hei.ad)
print(hei.kind)
hei.food = '单身狗粮' # 也可以通过对象名在类的外部完成
hei.hp = 305 # 也可以在类的外部通过对象名来修改属性的值
print(hei.__dict__)
print(hei.hp)
del hei.hp # 删除属性
print(hei.__dict__)
print(hua.name)
print(hua.ad)
print(hua.kind)
class Dog:
def __init__(self,name,blood,ad,kind):
self.name = name # 向对象的内存空间中添加属性
self.hp = blood # 可以通过self在类的内部完成
self.ad = ad
self.kind = kind
def bite(self,person):
person.hp -= self.ad
print('%s攻击了%s,%s掉了%s点血' % (self.name, person.name, person.name, self.ad))
class Person:
def __init__(self,name,hp,ad,sex):
self.name = name
self.hp = hp
self.ad = ad
self.sex = sex
def fight(self,dog):
dog.hp -= self.ad
print('%s攻击了%s,%s掉了%s点血'%(self.name,dog.name,dog.name,self.ad))
hei = Dog('小黑',300,20,'哈士奇')
alex = Person('alex',20,1,'不详')
alex.fight(hei)
print(hei.hp)
hei.bite(alex)
print(alex.hp)
面向对象用途
- 购物车
- 商品
- 名字 价格 库存数
- 用户
- 用户名 密码 钱 购物车 订单列表
- 查看商品列表
- 添加商品到购物车
- 删除商品
- 结算
- 退出
- 商品
一切皆对象
- list 类
- [1,2,3] 对象
- int 类
- a = 1
- dict {'k':'v'}
数据类型 也是类
- 对象 就是具体的数字
- 所以有的列表都能够使用列表的方法
- 所以有的数字都能够使用列表的方法
圆形类
属性 :半径
方法 :计算周长(2pir) 计算面积(pir^2)
from math import pi
print(pi)
class Circle:
def __init__(self,r):
self.r = r
def area(self):
return pi * self.r**2
def perimeter(self):
return 2*self.r*pi
c1 = Circle(5)
c2 = Circle(15)
print(c1.area())
print(c1.perimeter())
print(c2.area())
print(c2.perimeter())
2019-03-25-day018-面向对象的更多相关文章
- [2019.03.25]Linux中的查找
TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...
- ARTS Challenge- Week 1 (2019.03.25~2019.03.31)
1.Algorithm - at least one leetcode problem per week(Medium+) 986. Interval List Intersections https ...
- zabbix学习笔记----概念----2019.03.25
1.zabbix支持的通讯方式 1)agent:专用的代理程序,首推: 2)SNMP: 3)SSH/Telnet: 4)IPMI,通过标准的IPMI硬件接口,监控被监控对象的硬件特性. 2)zab ...
- 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
传送门 题解可以参见zjjzjjzjj神仙的,写的很清楚. 代码: #include<bits/stdc++.h> #define ri register int using namesp ...
- 2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)
传送门 题意:给你一棵带点权的树,多次询问路径的最大异或和. 思路: 线性基上树?? 倍增维护一下就完了. 时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n) 代码: #include ...
- 2019.03.25 bzoj4567: [Scoi2016]背单词(trie+贪心)
传送门 题意: 给你n个字符串,不同的排列有不同的代价,代价按照如下方式计算(字符串s的位置为x): 1.排在s后面的字符串有s的后缀,则代价为n^2: 2.排在s前面的字符串有s的后缀,且没有排在s ...
- 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)
传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...
- 2019.03.25 bzoj2329: [HNOI2011]括号修复(fhq_treap)
传送门 题意简述: 给一个括号序列,要求支持: 区间覆盖 区间取负 区间翻转 查询把一个区间改成合法括号序列最少改几位 思路: 先考虑静态的时候如何维护答案. 显然把所有合法的都删掉之后序列长这样: ...
- 2019.03.25 NOIP训练 匹配(match)(贪心)
题意简述: 思路: 直接考虑把人和物品都看成二维平面上面的a,ba,ba,b两类点,然后一个aaa和bbb匹配的条件是xa≤xb&&ya≤ybx_a\le x_b\&\& ...
- 2019.03.25 git
Git简介: Git是一个分布式版本控制软件. 背景故事: Linus在1991年创建了开源的Linux. 在2002年以前:世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后Linu ...
随机推荐
- SqlSever查询某个表的列名称、说明、备注、注释,类型等
这周整理了数据库文档,发现用导出脚本来整理表的信息注释查看不方便,因此我就想能不能SQL语句查询表的注释或者表的字段.我就我问朋友是不是可以,他给我点指导,然后自己也在网上百度,来实现自己的想法,我把 ...
- rsync未授权访问漏洞利用
漏洞描述:rsync是Linux系统下的数据镜像备份工具,使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他ssh,rsync主机同步.也就是说如果你可以连接目标IP的r ...
- oracle坏块处理记录
1. 执行sql:select count(distinct id) from bw_fpzxx ,报错如下: ORA-01578: ORACLE 数据块损坏 (文件号 16, 块号 195428)O ...
- python零碎知识点
0.规范化 使用Ctrl+Alt+L可以将代码排列格式更加规范化 1.浮点数 1.23x109就是1.23e9或者12.3e8:0.000012可以写成1.2e-5 2.字符串 >>> ...
- NOSQL -- Mongodb的简单操作与使用(wins)
NOSQL -- Mongodb的简单操作与使用(wins) 启动mongodb: 1.首先启动服务 dos命令下:net start Mongndb 也可以查询服务,手动开启服务: 完成后: 2.启 ...
- pandas报错处理:TypeError: Empty 'DataFrame': no numeric data to plot
Tushare返回的是pandas的DataFrame格式,但是执行以下代码时报错:TypeError: Empty 'DataFrame': no numeric data to plot impo ...
- 牛客网 PAT 算法历年真题 1009 : 1019. 数字黑洞 (20)
1019. 数字黑洞 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定任一个各位数字不完全相同的4 ...
- 解决libvlc_media_player_stop时死锁的方法
转自:http://www.jiazi.cn/blog/?id=56 扩散该解决方法 最近需要使用VLC控件来做一个简单的流媒体播放器,在实施过程中,发现在调用libvlc_media_player_ ...
- pyqt实现滑动开关
https://www.cnblogs.com/feiyangqingyun/p/6035633.html 根据Qt的实现,在PyQt上面实现了滑动开关的控件 import sys from PyQt ...
- IOS中position:fixed弹出框中的input出现光标错位的问题
解决方案是 在弹框出现的时候给body添加fixed <style type="text/css"> body{ position: fixed; width: 100 ...