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 ...
随机推荐
- spring boot 创建web项目并使用jsp作前台页面
参考链接:https://www.cnblogs.com/sxdcgaq8080/p/7712874.html
- python theading线程开发与加锁、信号量、事件等详解
线程有2种调用方式,如下: 直接调用 import threading import time def sayhi(num): #定义每个线程要运行的函数 print("running on ...
- 【JS】【4】字符串数字比较大小
两个转换函数: parseInt():把值转换成整数 parseFloat():把值转换成浮点数 也有其他方法,详情请看参考博客,但个人认为转换函数是最好的方法 参考文档: 1,js.jquery字符 ...
- 成功解决You are using pip version 9.0.1, however version 9.0.3 is available. You should consider upgra
解决问题 You are using pip version 9.0.3, however version 10.0.1 is available.You should consider upgrad ...
- 一、ZooKeeper学习
一.什么是ZooKeeper? ZooKeeper是一个分布式应用的开源协调服务.目的就是给用户提供同步.配置管理.分组和命名等服务.是Java语言编写的,支持Java和C两种语言.通俗的讲,它就是用 ...
- [LeetCode] 110. Balanced Binary Tree ☆(二叉树是否平衡)
Balanced Binary Tree [数据结构和算法]全面剖析树的各类遍历方法 描述 解析 递归分别判断每个节点的左右子树 该题是Easy的原因是该题可以很容易的想到时间复杂度为O(n^2)的方 ...
- [LeetCode] 104. Maximum Depth of Binary Tree ☆(二叉树的最大深度)
描述 Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the l ...
- git报错fatal: I don't handle protocol 'https'处理
一.背景说明 今天使用在Cygwin中git clone时报fatal: I don't handle protocol 'https',如下: 以为是Cygwin实现的git有点问题没太在意,换去 ...
- Linux登录超时自动退出处理办法
出于安全方面的考虑,机器常要求配置一个登录时间期限,当闲置超过这一期限就自动退出:但在某些场合我们需要时不时地就使用机器,如果每次都要重新ssh登录那是非常麻烦的 方法一:让当前会话一直处于工作状态 ...
- maven运行时的配置及命令详解
上面是指定端口运行程序的,也可以先指定好,直接在上面的地方写jettty:run 当然,如果你是在控制台运行且安装了maven,直接可以进入项目的文件中:mvn jetty:r ...