【python零基础入门学习】python进阶篇之OOP - 面向对象的程序设计_基于oop的gui交互的设计与实现python面向对象登录操作(1)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

def init(self,nm,wp):#self是约定俗成, 定义角色用
        self.name = nm
        self.weapon = wp

if name == ‘main’:
    wp = Weapon(‘方天画戟’,100)
    lb = Role(‘吕布’,wp)
    print(wp.name,wp.strength)
    print(lb.weapon.name)
    print(lb.weapon.strength)


### 子类:


* - 两个类有很多一样的地方
* - 某一个类与另一个类又有不同
* - 子类可以继承父类的方法
* - 子类可以有多个父类
* - 父子类有同名方法,查找顺序是自下向上,自左向右,先找到的执行


 ![](https://img-blog.csdnimg.cn/52e452873d224e65ad4b7ab9c25b61d2.png) 



class Role:
    def init(self,nm,wp):#self是约定俗成, 定义角色用
        self.name = nm
        self.weapon = wp

def show_me(self):
        print(‘我是%s,我使用%s’ % (self.name,self.weapon))

def speak(self,words):
        print(words)

class Warrior(Role): #括号中是父类,也叫基类
    pass

class Mage(Role):
    def fly(self):
        print(‘i can fly.’)

if name == ‘main’:
    #实例化时,子类中没有__init__方法,将会寻找父类的相关方法
    lb = Warrior(‘吕布’,‘方天画戟’)
    km = Mage(‘孔明’,‘扇子’)
    lb.show_me()
    km.show_me()
    km.fly()
    #lb.fly()这个没有fly功能

class A:
    def func1(self):
        print(‘a func’)

def func4(self):
        print(‘#####4#####’)

class B:
    def func2(self):
        print(‘b func’)

def func4(self):
        print(‘*********’)

class C(B,A):
    def func3(self):
        print(‘c func’)

# def func4(self):
    #     print(‘^^^^^^^^’)

if name == ‘main’:
    c1 = C()
    c1.func1()
    c1.func2()
    c1.func3()
    c1.func4()

自下向上,自左向右------先C-B-A,  之后C(B,A)


### 魔法方法:


特殊方法:


* \_\_init\_\_ :实例化类实例时默认会调用的方法
* \_\_str\_\_:打印/显示实例时调用方法以及 返回字符串
* \_\_call\_\_: 用于创建可调用的实例



class Book:
    def init(self,title,author):
        self.title = title
        self.author = author

def str(self):
        # 打印实例时,执行此方法
        return ‘《%s》’ % self.title

def call(self):
        print(‘《%s》是%s编著的’ % (self.title,self.author))

if name == ‘main’:
    pybook = Book(‘Python核心编程’,‘韦斯利’)#调用 init
    print(pybook) #调用__str__
    pybook() #调用__call__


### 正则表达式:


#### 匹配单个字符:


 ![](https://img-blog.csdnimg.cn/2a90dd6c7c7f4f7198a500f5691a77d1.png) 



/t.m
/t[a-z]m
/t[0-10]m  含有0和1
/t[0-9amo]m
/t[-a1]m  减号放两边
/t[^0-9]m  取反 不要数字0-9 
/t[0-9^]m  0-9以及^号
/t\dm 相当于 [0-9]

\w 任意数字字母
\W 取反  不是数字字母
\s 匹配空白字符  相当于  \r\v\f\t\n
\S 取反 不是空白字符

在vim里面  一排~!@#$%^&*()_+  都要转义


#### 匹配一组字符:


 ![](https://img-blog.csdnimg.cn/af3e6d8f2e1f4e58a184c5bfd87fb494.png) 



> 
> {M, } 最少M次
> 
> 
> { ,M} 最多M次
> 
> 
> 


#### 其他特殊字符:


 ![](https://img-blog.csdnimg.cn/4ab859d70fed4aa9886ac213b87d23fb.png) 



> 
> <tom> 只匹配tom  或者\btom\b
> 
> 
> 


#### 例子:


##### 为mac地址加:


* 找到MAC地址
* 每两个数字分一组
* 中间以:分隔开



> 
> 192.168.1.1 0000ca001256
> 
> 
> :%s/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)$/\1:\2:\3:\4:\5:\6/     ----%s//  全文替换 在vim中
> 
> 
> 


#### re模块:



import re
#在food的开头匹配f… 匹配到返回匹配对象,匹配不到则返回None
re.match(‘f…’,‘food’)
<_sre.SRE_Match object; span=(0, 3), match=‘foo’>
re.match(‘f…’,‘seafood’)
print(re.match(‘f…’,‘seafood’))
None

#search在字符串中匹配正则,匹配到返回匹配对象

re.search(‘f…’,‘seafood’)
<_sre.SRE_Match object; span=(3, 6), match=‘foo’>
m = re.search(‘f…’,‘seafood’)
m.group()
‘foo’  #匹配对象的group方法返回匹配到的内容

re.search(‘f…’,‘seafood is food’)
#返回所有匹配 findall
re.findall(‘f…’,‘seafood is food’)
[‘foo’, ‘foo’]

#返回匹配对象构成的生成器

re.finditer(‘f…’,‘seafood is food’)
<callable_iterator object at 0x7f8a055fd2b0>
list(re.finditer(‘f…’,‘seafood is food’))
[<_sre.SRE_Match object; span=(3, 6), match=‘foo’>, <_sre.SRE_Match object; span=(11, 14), match=‘foo’>]
for m in re.finditer(‘f…’,‘seafood is food’):
…     m.group()

‘foo’
‘foo’

切分: 
#以-或者. 作为分隔符切割字符串

re.split(‘-|.’,‘hello-world-china.com.cn’)
[‘hello’, ‘world’, ‘china’, ‘com’, ‘cn’]

#把X替换成tedu

re.sub(‘X’,‘tedu’,‘X web site is X.cn’)
‘tedu web site is tedu.cn’

为了提升匹配效率,最好将正则表达式先编译

patt = re.compile(‘f…’)
patt.match(‘food’)
<_sre.SRE_Match object; span=(0, 3), match=‘foo’>
patt.search(‘seafood’)
<_sre.SRE_Match object; span=(3, 6), match=‘foo’>
m = patt.search(‘seafood’)
m.group()
‘foo’


#####  例子:


###### 分析apache访问日志:


 ![](https://img-blog.csdnimg.cn/96249e5ffb644a60a7d25b6067731ce3.png) 



import re

def count_patt(fname,patt):
    cpatt = re.compile(patt) #为了更好的执行效率,把模式编译
    patt_dict = {} #把结果保存到字典
    with open(fname) as fobj:
        for line in fobj:
            m = cpatt.search(line) #在一行中匹配模式
            if m:      #如果m不是None,非空为真
                key = m.group()
                patt_dict[key] = patt_dict.get(key,0) + 1
                # if key not in patt_dict:
                #     patt_dict[key] = 1
                # else:
                #     patt_dictp[key] += 1
    return patt_dict

if name == ‘main’:
    fname = ‘access_log’
    ip = ‘^(\d+.){3}\d+’
    br = ‘Chrome|MSIE|Firefox’
    result1 = count_patt(fname, ip)
    result2 = count_patt(fname, br)
    print(result1)
    print(result2)

#####################class
import re

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

z-1715289196535)]
[外链图片转存中…(img-r71BTMIb-1715289196536)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值