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

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

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

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

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

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__

正则表达式:

匹配单个字符:

/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里面  一排~!@#$%^&*()_+  都要转义

匹配一组字符:

{M, } 最少M次

{ ,M} 最多M次

其他特殊字符:

只匹配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访问日志:

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

class CountPatt:
def count_patt(self, 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’
wl = ‘Windows|Linux’
cp = CountPatt()
result = cp.count_patt(fname,ip)
result2 = cp.count_patt(fname, br)
print(result)
print(result2)

result1 = count_patt(fname, ip)

result2 = count_patt(fname, br)

print(result1)

print(result2)

##################class + 绑定文件
import re

class CountPatt:
def init(self,fname):
self.fname = fname

def count_patt(self, patt):
cpatt = re.compile(patt) #为了更好的执行效率,把模式编译
patt_dict = {} #把结果保存到字典
with open(self.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:

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

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

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

if key not in patt_dict:

#     patt_dict[key] = 1

else:

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

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-VCUMnwpZ-1713438243864)]

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

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值