### 继承和重写

本文介绍了Python中的继承概念,包括父类与子类的关系以及魔法方法`__mro__`。同时,详细讲解了正则表达式的基础知识,如通配符、字符集及其规则,并列举了如`fullmatch`、`findall`等正则表达式的方法及其实现的功能。
摘要由CSDN通过智能技术生成

继承和重写

一、继承:在Python中,是为了最大程度减少代码量
被继承的类叫做父类,基类,超类,继承的叫子类,衍生类,派生类
子类能继承父类的属性和方法,一个子类可以继承多个类,也可以间接继承。
隔壁老王是煎饼果子名人,他有一天干不动了,但是不想让手艺失传。
所以隔壁老王将手艺传给了大儿子王二麻子

class Father:
    def __init__(self,name = '隔壁老王',kungfu = '《煎饼果子宝典》'):
        self.name = name
        self.kungfu=kungfu

    def cook(self):
        return f'{self.name}根据{self.kungfu}做出美味的煎饼果子'
F1 = Father()
print(F1.cook())
# 继承语法:类名后添加小括号,小括号中写被继承父类的类名
class Son(Father):
    # 子类还可以拥有自己的属性,但子类一旦拥有了自己的属性,他将不再自动继承父类属性
    def __init__(self,age):
        #子类的超类的初始化属性
        # super(Son,self).__init__()
        #直接把父类属性拿过来,使用self传值
        Father.__init__(self)
        self.age = age
    #子类虽然继承了父类,但是子类还可以拥有自己的方法
    #王二麻子还想去学习新式煎饼果子.>>>>>学成归来
    def newCook(self,book):
        return f'{self.age}{self.name}学成归来{book}做出新的煎饼果子'
    #重写父类的方法
    def cook(self):
        return f'{self.name}根据《煎饼果子宝典》和《新式煎饼果子》做出更哈吃的煎饼果子'
    # 子类重写父类后还想在使用父类的方法
    def oldCook(self):
        return super(Son, self).cook()
s1 = Son(30)
s1.name = '王二麻子'
print(s1.cook())
print(s1.newCook('新的煎饼果子秘籍'))
print(s1.oldCook())
  • 王二麻子将父亲的煎饼果子发扬光大,年纪轻轻月工资达到3200,走向人生巅峰
    王二麻子退休后又想将自己一身技能传给儿子。
  • 魔法方法: mro,使用__mro__能够看到子类继承的顺序,python中所有的类都有一个顶级类object
print(Son.__mro__)

正则表达式

  1. 正则表达式是使用一系列特殊符号从字符串中匹配内容
  2. 正则表达式是独立于所有语言的语法,所有语言中正则表达式的语法是相同的,只是使用方式不一样
  • fullmatch(正则表达式,字符串): 判断字符串是否完全正则表达式规则,
    成立返回一个对象,不成立返回空值None
    二、匹配类符号
  1. 通配符: .(点) 可以匹配任意一个符号
re_str = 'a.b'
# str1 = 'abc'
str1 = 'a1b'
re.fullmatch(re_str,str1)
result1 = re.fullmatch(re_str,str1)
print(result1)
  1. \d:匹配0-9数字
  2. \D:匹配非数字
re_str = 'a\d\dc'
str2 = 'a12c'
result2 = re.fullmatch(re_str,str2)
print(result2)
  1. 普通符号:在正则表达式中没有特殊含义的符号
re_str = 'abcd'
str3 = 'abcd'
print(re.fullmatch(re_str, str3))
  1. \s:匹配空白符号(空格,\n,\t,\v等)
  2. \S:匹配非空白符号
# re_str = 'a\sb'
# str4 = 'a\nb'
re_str = 'a\Sb'
str4 = 'acb'
print(re.fullmatch(re_str, str4)
  1. \w:匹配数字,字母,下划线,朝鲜语。
  2. [字符集] - 从[]的字符集中匹配一个符号
  • 常见的字符集
  • 字符集规则:-连接的是范围,-左边必须小于右边的,-不能出现在字符集开头或结尾,不然表示-自己
re_str = '[a-zA-Z][a-zA-Z]'
str5 = 'az'
print(re.fullmatch(re_str, str5))

9.[^字符集]: 匹配不在字符集中的元素

  • 字符集规则没有变,必须在字符集最开头添加^
re_str = '[^a-zA-Z][a-zA-Z][a-z^A-Z]'
str6 = '.z^'
print(re.fullmatch(re_str, str6))
  • findall(正则表达式,字符串):方法一、从字符串中按照正则表达式的规则匹配所以可能,并将每一个结果放到列表中
  • 方法二、 如果正则表达式中出现了分组,只会获取正则表达式结果中符合分组中规则的结果
str1 = 'a1b35677d45f6j7'
re_str = r'\d+'
print(re.findall(re_str, str1))

重复

import re
# 1. ?:匹配0次或者1次
re_str=  'a\d?'
str1 = 'a'
print(re.fullmatch(re_str, str1))
# 2.  +:匹配一次或多次打印出来
str2 = 'a1b35677d45f6j7'
re_str=  '[0-9]+'
print(re.findall(re_str, str2))
# 3. * :匹配任意次数
print(re.findall('a\d*',str2))
# 4. {M,N}
# {M}:匹配m次
# {N}匹配n次
# {M,N}最少m次,最多n次
# {M,}至少匹配m次,没有最多次
# {,N}最多匹配n次,最少匹配0次
str2 = 'a1b35677d45f6j7'
re_str=  '[0-9]{1,}'
re_str = '\d{1,}'
print(re.findall(re_str, str2))
#贪婪和非贪婪
# 所有次数不确定的匹配都是贪婪的(一次性匹配更多的元素)
#非贪婪就是匹配取最短长度结果,在非贪婪涉及的符号的基础上添加一个?即可,比如+?,{,N}?,*?等
str3 = 'abcabcrbc'
re_str = 'a.+c'
print(re.findall(re_str, str3))
re_str = 'a.+?c'
print(re.findall(re_str, str3))
#hghjkae中i90b=oiuyghjv中的"ae中i9"取出来
str2 = 'hghjkae中i90b=oiuyghjv'
re_str = 'a.+9'
print(re.findall(re_str, str2))

分支和分组

import re
# 分支:|
str1 = 'abcabd'
# 匹配出“abc'和’abd'
re_str= '[a-z]{3}'
print(re.findall(re_str, str1))
# .通配符放到[]中,特殊意义消失
re_str = 'abc|abd'
print(re.findall(re_str,str1))
# 分组:()
#1.能过将同类项取出来
# 2.能够将分组中的结果重复
str1 = 'abcabd'
re_str = '(ab(c|d))'
print(re.findall(re_str,str1))
# str2 = '1234==12341235'
str2 = '1234==12341234'
re_str = r'(\d{4})(=)\2\1\1'
# 如果字符串后面再次出现过前面匹配过得结果,可以将前面的结果使用分组包围起来
# 结合\N(N是数字,代表第N个分组)的语法,可以”将前面第N个分组的结果“重复使用
print(re.fullmatch(re_str, str2))
# 正则表达式不是转义字符,在写正则表达式时,在正则表达式前面添加r或者R.

正则表达式的方法

  • fullmatch\findall\split\sub\search\match
  1. fullnatch:查看整个字符串是否符合正则表达式 None
  2. findall:将字符串中所有符合正则表达式的规则的结果匹配出来
  3. 方法二:如果正则表达式中出现分组,会按照正则表达式匹配结果,再讲符合分组中正则表达式的规则的结果匹配出来
  4. slit:按照正则表达式的规则切割字符串
  5. sub:将符合正则表达式的字符串替换为新的字符串
  6. search:查看字符串中第一个符合正则表达式的结果None
  7. match:查看字符串的开头是否符合正则表达式的规则None
import re
str1 = 'a,b.c'
re_str ='a'
print(re.match(re_str, str1))
re_str = '[a-z]'
print(re.search(re_str, str1))
re_str = '[,.]'
print(re.split(re_str, str1))
# re.sub(正则表达式,newStr,oldStr)
print(re.sub('[,.]', '', str1))
  • findall,split,sub常用
    str1))
    re_str = ‘a-z
    print(re.search(re_str, str1))
    re_str = ‘[,.]’
    print(re.split(re_str, str1))
    re.sub(正则表达式,newStr,oldStr)
    print(re.sub(‘[,.]’, ‘’, str1))
+ findall,split,sub常用
+ match,search,fullmatch不常用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值