re模块

  1. 字符串匹配
  2. 列表 = findall(正则表达式,待匹配的字符串) 找所有
    • 结果集 = search 找第一个,结果集.group()
    • 结果集 = match 从第一个字符开始匹配,结果集.group()
  3. 编译结果 = compile(正则表达式) 编译 加快执行效率,节省时间
    • 编译结果.findall
    • 编译结果.finditer
    • 编译结果.search
  4. 迭代器 = finditer(正则表达式,待匹配的字符串) 返回一个迭代器,节省空间for i in 迭代器:i是一个结果集,通过i.group才能取到结果
  5. 替换后的字符串 = sub(正则,新的值,待匹配的字符串)(替换后的字符串,替换了多少次) =subn(正则,新的值,待匹配的字符串)
  6. 列表 = split(正则,待切割的字符串)
    • 被切割的内容

      • 如果正则是带分组的,那么保留被切掉的内容
      • 如果正则是不带分组的,那么不保留被切掉的内容
  7. 分组
    • findall 会优先显示分组中的内容
    • 取消分组优先 (?:正则)
    • ret = search()
      • ret.group(1) 获取第一组中的内容
    • 分组命名
      • (?P正则)
    • 引用分组
      • (?P=name)
      • \1 \2
  8. 使用正则做匹配的时候,往往要匹配的东西很普通,容易和我们不需要的内容混在一起
  9. 我们就通过把不需要的东西也匹配出来 来把想要的内容放在分组中方便获取

面向对象

    • 名字,血量,攻击力,性别
    • 名字,血量,攻击力,品种

属性很有可能是不统一

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)

通过两个模子 捏出两个具体的角色

抽象 :只能知道有哪些属性

具体 :可以描述他的属性的值的

  1. 给两个特定的属于特定角色的方法 设置了他的使用范围
  2. 让其他角色不能随意调用属于固定角色的方法
  3. 先思考这个程序中有几个角色
  4. 然后描述这个角色 属性和动作
  5. 把这个属性和动作都装到一个角色中
  6. 面向对象编程

面向对象语法

  1. 对象 :具有具体的属性值的实际存在的例子 # 实例
  2. 类 :具有相同方法和属性的一类事物
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'])
  • 对象 也是实例
  • 创建一个对象也是创建实例
  • 实例化的过程 :
    1. 开辟了一块空间,创造了一个self变量来指向这块空间
    2. 调用init,自动传self参数,其他的参数都是按照顺序传进来的
    3. 执行init
    4. 将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)
  1. 类名可以调用所有定义在类中的名字

    • 变量
    • 函数名
  2. 对象名 可以调用所有定义在对象中的属性
    • 在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)

面向对象用途

  • 购物车

    • 商品

      • 名字 价格 库存数
    • 用户
      • 用户名 密码 钱 购物车 订单列表
      • 查看商品列表
      • 添加商品到购物车
      • 删除商品
      • 结算
      • 退出

一切皆对象

  1. list 类
  2. [1,2,3] 对象
  3. int 类
  4. a = 1
  5. 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-面向对象的更多相关文章

  1. [2019.03.25]Linux中的查找

    TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...

  2. 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 ...

  3. zabbix学习笔记----概念----2019.03.25

    1.zabbix支持的通讯方式 1)agent:专用的代理程序,首推: 2)SNMP:  3)SSH/Telnet:  4)IPMI,通过标准的IPMI硬件接口,监控被监控对象的硬件特性. 2)zab ...

  4. 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)

    传送门 题解可以参见zjjzjjzjj神仙的,写的很清楚. 代码: #include<bits/stdc++.h> #define ri register int using namesp ...

  5. 2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)

    传送门 题意:给你一棵带点权的树,多次询问路径的最大异或和. 思路: 线性基上树?? 倍增维护一下就完了. 时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n) 代码: #include ...

  6. 2019.03.25 bzoj4567: [Scoi2016]背单词(trie+贪心)

    传送门 题意: 给你n个字符串,不同的排列有不同的代价,代价按照如下方式计算(字符串s的位置为x): 1.排在s后面的字符串有s的后缀,则代价为n^2: 2.排在s前面的字符串有s的后缀,且没有排在s ...

  7. 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)

    传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...

  8. 2019.03.25 bzoj2329: [HNOI2011]括号修复(fhq_treap)

    传送门 题意简述: 给一个括号序列,要求支持: 区间覆盖 区间取负 区间翻转 查询把一个区间改成合法括号序列最少改几位 思路: 先考虑静态的时候如何维护答案. 显然把所有合法的都删掉之后序列长这样: ...

  9. 2019.03.25 NOIP训练 匹配(match)(贪心)

    题意简述: 思路: 直接考虑把人和物品都看成二维平面上面的a,ba,ba,b两类点,然后一个aaa和bbb匹配的条件是xa≤xb&&ya≤ybx_a\le x_b\&\& ...

  10. 2019.03.25 git

    Git简介: Git是一个分布式版本控制软件. 背景故事: Linus在1991年创建了开源的Linux. 在2002年以前:世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后Linu ...

随机推荐

  1. 迷宫最短路径问题的dfs,bfs实现

    迷宫的最短路径 给定一个大小为 N×M的迷宫.迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动.请求出从起点到终点所需的小步数.请注意,本题假定从起点一定可以移动到终点 限制条件:N,M ...

  2. 使用telnet模拟邮件的收发

    smtp协议是一个简单的邮件传输协议,利用它我们可以将邮件发送给别人,这里将通过telnet这个程序利用smtp协议从网易向gmail发送一封邮件 基本步骤如下: 1.使用telnet连接smtp服务 ...

  3. 【IDEA】【5】快捷键

    前言: 1,更改快捷键:File->Settings->Keymap 2,我自定义的快捷键 shitf+alt+s getter,setter,toString方法 (修改处:Keymap ...

  4. python-day91--JS实现的ajax

    一.AJAX核心(XMLHttpRequest) 其实AJAX就是在Javascript中多添加了一个对象:XMLHttpRequest对象.所有的异步交互都是使用XMLHttpServlet对象完成 ...

  5. Ubuntu中php.ini修改运行内存

    首先,我们要知道我们要修改的是什么文件?那就是php.ini文件,一般php有关运行的文件都跟这个文件有关系,路径是 /etc/php5/apache2 .在这里我们就可以用命令进入, cd /etc ...

  6. Beta阶段——第4篇 Scrum 冲刺博客

    Beta阶段--第4篇 Scrum 冲刺博客 标签:软件工程 一.站立式会议照片 二.每个人的工作 (有work item 的ID) 昨日已完成的工作 人员 工作 林羽晴 昨日完成获取提醒语句的接口函 ...

  7. 数据结构与算法之PHP查找算法(二分查找)

    二分查找又称折半查找,只对有序的数组有效. 优点是比较次数少,查找速度快,平均性能好,占用系统内存较少: 缺点是要求待查表为有序表,且插入删除困难. 因此,折半查找方法适用于不经常变动而查找频繁的有序 ...

  8. iOS架构设计系列之解耦的尝试之变异的MVVM

    最近一段时间,在思考如何合理的架构一个可扩展性良好的界面编程方式.这一部分的成果做成了一个叫ElementKit的库.目前功能在不断的完善中. 关于iOS的架构,看多了MVVM,VIPER,MVC,M ...

  9. 通过配置hosts.allow和hosts.deny文件允许或禁止ssh或telnet操作

    1.登录主机,如果是普通账户先切换至root账号 su root 2.编缉/etc/hosts.allow文件 vi /etc/hosts.allow 允许内容 书写格式(改成自自需要的IP或IP段) ...

  10. @RequestParam的使用

    来源:http://825635381.iteye.com/blog/2196911 @RequestParam: 一. 基本使用,获取提交的参数 后端代码: @RequestMapping(&quo ...