多重继承、正则表达式和git的使用

多重继承

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指南

"""
熟悉这两个工具
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值