python基础语法学习笔记(四)

整理一下自己初学python时打的一些代码,方便日后用的时候查阅。

61 多继承

class Base:
    def test(self):
        print("base test")


class A(Base):
    def test1(self):
        print("test1")


class B(Base):
    def test2(self):
        print("test2")


class C(A, B):  # 多继承
    pass


c = C()
c.test()
c.test1()
c.test2()

62 多继承注意点

class Base:
    def test(self):
        print("base")


class A(Base):
    def test(self):
        print("A")


class B(Base):
    def test(self):
        print("B")


class C(A, B):  # 多继承
    pass


c = C()
c.test()  # C内没有的的话 会调A的 内部有个C3算法

63 多态

class Dog(object):
    def print_self(self):
        print("大家好,我是xxx,请多多关照")


class Xiaotianquan(Dog):
    def print_self(self):
        print("Hello~ Everyone~ I'm your Boss")


def introduce(temp):  # 多态!!!直到用的时候才知道用的是父类还是子类
    temp.print_self()


dog1 = Dog()
dog2 = Xiaotianquan()

introduce(dog1)
introduce(dog2)

64

class Tool(object):
    # 属性
    num = 0  # 类属性

    # 方法
    def __init__(self, new_name):
        self.name = new_name
        Tool.num += 1


too11 = Tool("铁锹")
tool2 = Tool("铲子")
tool3 = Tool("水桶")
# Tool 为类对象  对应的属性为类属性
# tool1、tool2、tool3是实例对象  对应的属性为实例属性
print(Tool.num)

65 实例方法、类方法、静态方法

class Game:
    # 类属性
    num = 0

    # 实例方法
    def __init__(self):
        # 实例属性
        self.name = "laowang"

    @classmethod  # 加上这句话就是 类方法
    def add_num(cls):
        cls.num = 100  # 修改类属性

    @staticmethod  # 静态方法  可以没有任何参数
    def print_menu():  # 实例方法必须写个self
        print("-" * 50)
        print("        打豆豆V1.1 ")
        print(" 1. 开始游戏")
        print(" 2. 结束游戏")
        print("-" * 50)


game = Game()

# Game.add_num()
# print(Game.num)

game.add_num()
print(game.num)
game.print_menu()  # 通过类去调用静态方法

66 练习-4s店

class Carstore(Store):
    def __init__(self):
        self.factory = Factory()
        
    def order(self, car_type):
        return self.factory.select_car_type(car_type)


class Factory(object):
    def select_car_type(self, car_type):  # 解耦合
        if car_type == "索纳塔":
            return Suonata()
        elif car_type == "名图":
            return Mingtu()


class Car(object):
    def move(self):
        print("The car is moving!")

    def music(self):
        print("The music is on!")

    def stop(self):
        print("The car stoped!")


class Suonata(Car):
    pass


class Mingtu(Car):
    pass


car_store = Carstore()
car = car_store.order("索纳塔")
car.move()
car.music()
car.stop()

67 new方法

class Dog(object):
    def __init__(self):
        print("-----init----")

    def __del__(self):
        print("-----del----")

    def __str__(self):
        print("-----str----")

    def __new__(cls):  # 创建一个对象就调用
        print(id(cls))
        print("-----new----")
        return object.__new__(cls)


print(id(Dog))
xta = Dog()  # 这句话 执行三步:
# 1.调用__new__方法来创建对象 找了一个变量接收__new__的返回值 返回值表示创建出来的对象的引用
# 2.调用__init__方法
# 3.返回对象的引用
# C++里的构造函数  = __init__ + __new__
# 但python是两个方法

68 创建一个单例

class Dog:
    __instance = None  # 私有属性
    __init_flag = False

    def __new__(cls, name):
        if cls.__instance == None:  # 说是等式运算符无法与None比较 但程序依旧正常运行了?
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance

    def __init__(self, name):
        if Dog.__init_flag == False:
            self.name = name
            Dog.__init_flag = True


# 不管创建几个 指向的都是同一个
a = Dog("哈哈")
print(id(a))
print(a.name)

b = Dog("哮天犬")  # 修改原来的“哈哈”
print(id(b))
print(b.name)
# 说明 init 和 new 是分开的

69 异常处理

try:
    # 11/0
    # open("xxx.txt")  # 文件不存在
    # print(num)  # 名字错误
    print("-----1-----")

except NameError:  # 预处理
    print("如果捕获到异常后要做的处理......")

except FileNotFoundError:
    print("文件不存在.....")

# except (NameError, FileNotFoundError):  # 可以用元组的方式放在一起
#    print("文件不存在.....")

except Exception as ret:  # 把原来的显示提示
    print("如果用了Exception,那么意味着只要上面的except没有捕获到异常,这个except一定会捕获到")
    print(ret)

else:
    print("没有异常才执行")

finally:
    print("-----finally-----")  # 不管有没有异常 最后要执行

print("-----2-----")

70 异常处理Ctrl+C

import time  # 放顶部就行了

while True:
    print("hhha")
    time.sleep(1)  # Ctrl+C没停啊????

71 if的真假判断

# 条件为假False
if "":
    print("---1---")

if None:
    print("---2---")

if 0:
    print("---3---")

if []:
    print("---4---")

if {}:
    print("---5---")

# 为真
if 1:
    print("haha")

if -1:  # 数字0为假 非0为真
    print("hhha")

if "a":
    print("hhhhha")

72 模块.py都是模块

import sendmsg  # 模块导入时会把模块程序全部走一遍
sendmsg.test1()
sendmsg.test2()

from sendmsg import test1
from sendmsg import test2
test1()
test2()

from sendmsg import *
# 优点:导入sendmsg的所有功能
# 缺点:如果导入了两个模块 里面有同名功能 其中一个则会被覆盖

73

import xxx


class Name(object):
    pass


def x():
    pass


def main():
    pass


if __name__ == '__main__':
    main()  # 整个程序最开始执行的地方

74 all

from sendmsg import *
__all__ = ["test1"]
# 本来 * 会导入所有功能,现在相当于重新定义了 * 的内容,只导入test1功能
# 这样别人只能用 __all__ 里面的内容


def test1():
    print("----test1----")


def test2():
    print("----test2----")


num = 100


class Test(object):
    pass

75 给程序传参数

import sys

print(sys.argv)

name = "laowang"

print("welcome %s" % name)

76 列表生成式

a = []
i = 10
while i <= 77:
    a.append(i)
    i += 1

# 从10到77
for i in range(10, 78):
    print(i)

# range(10, 18, 2)  # range就是生成列表的
# 用法类似于切片
# range(1, 10000000000)
# python2中range有风险:数据太大 内存不够
# python3是用的时候才生成,没有风险

# 直接生成1-17的列表
a = [i for i in range(1, 18)]
print(a)

# 生成一个有17个12的列表
a = [12 for i in range(1, 18)]
print(a)

# 0-9
c = [i for i in range(10)]
print(c)

# if条件嵌套
c = [i for i in range(10) if i % 2 == 0]
print(c)

# [0, 0, 1, 1, 2, 2]
d = [i for i in range(3) for j in range(2)]
print(d)

# [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
d = [(i, j) for i in range(3) for j in range(2)]
print(d)

# 空间坐标
e = [(i, j, k) for i in range(2) for j in range(3) for k in range (2)]
print(e)

77 集合、元组、列表

a = (11, 22, 33, 11, 22, 33)  # 元组tuple
b = [11, 22, 33, 11, 22, 33]  # 列表list
c = {11, 22, 33, 11, 22, 33}  # 集合set

print(a)  # (11, 22, 33, 11, 22, 33)
print(b)  # [11, 22, 33, 11, 22, 33]
print(c)  # {33, 11, 22}
# 元组不可改,只读
# 列表支持增删查改
# 集合不能有相同的东西
# {} 有字典 也有集合

# 去除列表内重复元素
d = [11, 22, 33, 44, 11, 22, 33]
f = set(d)  # 变为集合 set
print(f)
d = list(f)  # 类型转为列表 list
print(d)

78 练习-名片管理系统(升级版)

members = [{"name": "羊", "qq": 1234567, "weixin": "yang123", "address": "合肥"}]


def print_func():
    print("*"*50)
    print("             名片管理系统  V0.01")
    print(" 1: 添加一个新的名片")
    print(" 2: 删除一个名片")
    print(" 3: 修改一个名片")
    print(" 4: 查询一个名片")
    print(" 5: 打印所有名片")
    print(" 6: 保存信息")
    print(" 0: 退出系统")
    print("*"*50)


def new_card():
    n_name = input("请输入新的名字:")
    n_qq = input("请输入新的QQ:")
    n_weixin = input("请输入新的微信:")
    n_address = input("请输入新的住址:")
    infor = {}
    infor["name"] = n_name
    infor["qq"] = n_qq
    infor["weixin"] = n_weixin
    infor["address"] = n_address
    members.append(infor)  # 将一个字典添加到列表中
    print(members)


def modify_card():
    global members
    person = input("请你输入你的想修改的名片:")
    members.remove(person)
    person2 = input("请输入修改后的名片:")
    members.append(person2)
    print(members)


def seek_card():
    global members
    name = input("输入你想查询的名字:")
    name_flag = 0
    for temp in members:
        if temp["name"] == name:
            print(temp)
            name_flag = 1
            break
    if name_flag == 0:
        print("查无此人")


def print_card():
    global members
    print("姓名  \tQQ  \t微信  \t住址")
    for temp in members:
        print("%s\t%s\t%s\t%s" % (temp["name"], temp["qq"], temp["weixin"], temp["address"]))


def save_2_file():
    # 把已经添加的信息保存到文件中
    f = open("backup.data", "w")  # 以写的方式打开
    f.write(str(members))

    f.close()


def load_infor():
    global members

    try:
        f = open("backup.data")
        members = eval(f.read())
        f.close()
    except Exception:
        pass


def main():  # 主函数
    # 恢复(加载)之前的数据到程序中
    load_infor()

    # 打印功能提示
    print_func()
    while True:
        num = int(input("请输入功能号:"))
        if num == 1:
            new_card()

        elif num == 2:
            pass

        elif num == 3:
            modify_card()

        elif num == 4:
            seek_card()

        elif num == 5:
            print_card()

        elif num == 6:
            save_2_file()

        elif num == 0:
            print("感谢你的使用!")
            break
        else:
            print("输入错误,请重新输入!")
        print("")


if __name__ == "__main__":
    # 调用主函数
    main()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值