Python学习第十九天——多重继承、正则表达式和git的使用
2018-03-19 18:28
671 查看
多重继承
class Father(object): def __init__(self, name): self._name = name def drink(self): print(self._name + '正在白酒') class Monk(object): def __init__(self, nickname): self._nickname = nickname def eat_vagetable(self): print(self._nickname + '正在吃斋') class Musician(object): def __init__(self, art_name): self._art_name = art_name def play_piano(self): print(self._art_name + '正在弹钢琴') def drink(self): print(self._art_name + '正在喝绿茶') class Son(Father, Monk, Musician): #这个顺序很重要,如果多个父类用共同的方法,优先继承前面的 def __init__(self, name, nickname, art_name): Father.__init__(self, name) Monk.__init__(self, nickname) Musician.__init__(self, art_name) #不要轻易使用多重继承,如果不可避免,最好将它的其他的父类设置成抽象类 def main(): son = Son('王大锤', '智障禅师', '小炮')#多重继承要传多个参数 son.drink() Musician.drink(son) #通过这种方式可以让son访问不是第一顺序的父类 son.eat_vagetable() son.play_piano() if __name__ == '__main__': main()
#这段代码是对上面代码的优化,在不可避免使用多重继承的情况下,我们最好将除第一个父类以外的 #其他父类写成抽象类 from abc import ABCMeta, abstractmethod class Father(object): def __init__(self, name): self._name = name def drink(self): print(self._name + '正在白酒') class Monk(object, metaclass=ABCMeta): def __init__(self, nickname): self._nickname = nickname @abstractmethod def eat_vagetable(self): pass class Musician(object, metaclass=ABCMeta): def __init__(self, art_name): self._art_name = art_name @abstractmethod def play_piano(self): print(self._art_name + '正在弹钢琴') @abstractmethod def drink(self): print(self._art_name + '正在喝绿茶') class Son(Father, Monk, Musician): #这个顺序很重要,如果多个父类用共同的方法,优先继承前面的 def __init__(self, name, nickname, art_name): Father.__init__(self, name) self._nickname = nickname self._art_name =art_name def eat_vagetable(self): print(self._nickname + '正在吃斋') def play_piano(self): print(self._art_name + '正在弹钢琴') def drink(self): print(self._art_name + '正在喝绿茶') #不要轻易使用多重继承,如果不可避免,最好将它的其他的父类设置成抽象类 def main(): son = Son('王大锤', '智障禅师', '小炮')#多重继承要传多个参数 son.drink() son.eat_vagetable() son.play_piano() if __name__ == '__main__': main()
class A(object): def foo(self): print('A\'s foo')#\转义 class B(object): pass class C(object): def foo(self): print('C\'s foo') class D(B, C): pass def main(): d = D() d.foo() #这是一个菱形继承,一种非常糟糕的继承方法,在Python2中,输出的结果会是A的方法,默认的 #深度优先搜索,在Python3中,是广度优先搜索 #如果一个类有多个父类,而多个父类又有多个父类,(菱形继承/钻石继承) # 那么在搜索属性和方法是搜索的依据是C3算法 #这个是Python3中的一个改进,在此之前搜索的算法是深度优先搜索(DFS) #不要轻易使用多重继承 if __name__ == '__main__': main()
# ENIAC 第一台计算机
正则表达式 - 工具 - 字符串的匹配模式
正则表达式学习的网站正则表达式def is_valid_username(username): """ 判断用户名是否有效(用户名有字母数字下滑线构成且长度为6-20字符 :param username: 用户名 :return: 有效返回True 无效返回False """ if 6 <= len(username) <= 20: for c in username: if c not in 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_': #if not ('0' <= c <= '9' or 'A' <= c <= 'Z' or 'a' <= c <= 'z' or c == '_'): 效果同上 return False return True return False
#\w{6,20} 这段代码与上面的函数相同 #re - regular expression import re username = 'jackfrued##' m = re.match(r'\w{6,20}', username)#发现前面是匹配的,后面就不判断了 #x = re.match(r'^\w{6,20}$') 这样表示完整的字符串都匹配 print(m)#返回的是匹配,匹配不成功返回None print(m.span())#返回匹配的范围 print(m.group()) #返回匹配成功的位置 if m: print('匹配成功') else: print('匹配不成功')
import re username = '###jackfrued##' m = re.search(r'\w{6,20}', username)#对所有字符进行匹配,找到匹配的范围 print(m)#返回的是匹配,匹配不成功返回None print(m.span())#返回匹配的范围 print(m.group()) #返回匹配成功的位置 if m: print('匹配成功') else: print('匹配不成功')
print('a\n')#换行 print('a\\n')#多加\取消转义 print(r'a\n')#原始字符串
#验证QQ的正则表达式 #[1-9]\d{4,11},表示第一个数字是1到9后面跟4到11个数字 import re user = input('请输入账号') password = input('请输入密码') u = re.match(r'^[0-9a-zA-Z_]{6,20}$', user)#只能匹配字母数字下划线 s = re.match(r'[1-9]\d{4,11}', password) #pattern1 = re.compile(r'^[0-9a-zA-Z_]{6,20}$') 创建一个对象 #u = pattern1.match(user) #这种写法上在效果上与上面的写法一样,如果这个要在下面多次调用,建议这样写,否则用上面的方法 if not u : print('请输入正确的账号') if not s: print('请输入正确的密码') if u and s: print('有效')
请输入账号666666 请输入密码666666 有效
13[0-9]\d{8}|14[5,7]\d{8}|15[012356789]\d{8}|17[678]\d{8}|18[0-9]\d{8}
#www.pythontutor.com 一个辅助代码执行的网站,可以清楚看到代码执行时内存的分配
版本控制
#Subversion 集中式的版本控制 #Git 分布式的版本控制# #现有的仓库 github 全世界最大的代码集散地 #中国的仓库网站 开源中国 托管代码的平台 # Coding 可以建不限的公开仓库和两个私有仓库 """ CVS - Concurrent Version System VSS - Visual Source Safe 都是锁模式 2000年的时候被淘汰 Subversion 合并模式 必须有中央服务器 2005 Git-Linux 可以在本地做服务器 有了中央服务器效果就和Subversion一样 """ """ 在命令行提示符下输入 版本控制可以放任意文件 git --version检查是否已安装好git git init 初始化git,设置本地仓库,一个仓库只需要设置一次 git add . (.表示所有文件,注意空格) 将所有文件纳入版本控制 git add 文件名 将制定文件纳入版本控制,并没有真正的提交 git rm 文件名 删除制定文件 git status 显示版本控制状态,查看文件是否 git commit -m '上传原因' 将文件正式纳入版本控制 提交文件 不要输入git commit 后果自负。。一定要加-m和原因 git log 查看所有历史版本 git reset f3f3d818a2423ed11c98554a264a0717fd44eda1 回到历史版本,后面的是唯一的版本号 git checkout 文件名 拿回一个删除的文件 去Coding上建一个项目 git remote add origin https://git.coding.net/******/******.git git push -u origin master 通过这两段代码关联仓库 如果是要合并项目 需要输入git pull git 基本操作指南 http://www.bootcss.com/p/git-guide/ """
git指南
""" 熟悉这两个工具 """
相关文章推荐
- python3正则表达式学习及使用记录
- python网络爬虫学习(三)正则表达式的使用之re.match方法
- python爬虫学习---正则表达式的使用
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
- python 学习 -- 正则表达式的使用
- python网络爬虫学习(四)正则表达式的使用之re的其他方法
- 正则表达式使用学习(C++、Qt、Python)
- python 基础学习 正则表达式2(使用)
- python中re模块(正则表达式模块)的使用学习
- python 学习记录(2)—re 正则表达式模块的使用
- 正则表达式学习与利器使用
- 10分钟学习写正则表达式和使用L7防火墙(以封WINBOX为例)
- Python模块学习 re 正则表达式
- PYTHON正则表达式 re模块使用说明
- Python学习(三)——正则表达式模块
- 正则表达式入门经典(学习笔记二)——使用正则表达式的分析方法
- Python中的正则表达式学习总结
- Python模块学习 re 正则表达式
- Python天天美味(15) - Python正则表达式操作指南(re使用)(转)
- Python 正则表达式之 补充学习笔记