既有适合小白学习的零基础资料,也有适合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
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
z-1715289196535)]
[外链图片转存中…(img-r71BTMIb-1715289196536)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!