Python新手学习(十)

031

永久存储 引入pickle库(泡菜技术。。。)
存放:pickling
读取:unpickling
‘wb’是什么格式,二进制?

import pickle
mylist=[123,3.14,'小甲鱼',['another list']]
picklefile=open('D:\\mylist.pkl','wb')
pickle.dump(mylist,picklefile)#倒进去dump
picklefile.close()
picklefile=open('D:\\mylist.pkl','rb')
mylist2=pickle.load(picklefile)#load,加载
print(mylist2)

所涉及到的命令,引入泡菜库import pickle
pickle.dump(mylist,picklefile)倒进去,输入,好像在那本书上也看到了dump
dump命令,左边是列表(字典),右面是缸
mylist2=pickle.load(picklefile),加载文件中的信息,放进列表
这种操作相当于做了一个二进制的转化吧,存进去二进制再读出来

032

异常处理,永远不要相信客户,输入什么都可能存在不合法
小甲鱼总结的各种出现异常的链接
想不起来什么错误查找一下
try :
except :出现异常后处理的代码
except OSerror as reason:

try:
    sum=1+'1'
    int('abc')#这个是会出错的
    f=open('我为什么是一个文件.txt')
    print(f.read())
    f.close()
except OSError as reason :
    print('文件出错了,原因是:'+str(reason))
except TypeError as reason :
    print('类型出错了,错误原因是:'+str(reason))

034

try:
    print(int('123'))
except ValueError as reason :
    print('出错啦'+str(reason))
else:
    print('没有任何异常')
123
没有任何异常
try:
    print(int('abc'))
except ValueError as reason :
    print('出错啦'+str(reason))
else:
    print('没有任何异常')
出错啦invalid literal for int() with base 10: 'abc'

035

安装eazygui导入

036

类和对象

class turtle:
    color ='green'
    weight=10
    legs=4
    shell=True
    mouth='大嘴'
    def climb(self):
        print('我很努力的往前爬')
    def run(self):
        print('我在飞快的往前爬')
    def bite(self):
        print('咬死你')
    def eat(self):
        print('有得吃')
    def sleep(self):
        print('睡觉')
tt=turtle()#类的实例化
tt.climb()
tt.bite()
tt.eat()
我很努力的往前爬
咬死你
有得吃
list1=[2,1,7,3,5]
list1.sort()
class mylist(list):#list2是类的实例化,mylist是list的字辈
    pass
list2=mylist()
list2.append(5)
print(list2)
[5]

视频里的多态好像不太对

037

self 类似this

class ball:
    def setname(self,name):
        self.name=name
    def kick(self):
        print('我叫%s,谁踢我'% self.name)
a=ball()
a.setname('球A')
b=ball()
b.setname('球B')
a.kick()
b.kick()
我叫球A,谁踢我
我叫球B,谁踢我

在这里我将a赋给b
发现修改b的同时也会修改a

class ball:
    def setname(self,name):
        self.name=name
    def kick(self):
        print('我叫%s,谁踢我'% self.name)
a=ball()
a.setname('球A')
b=a
b.setname('球B')
a.kick()
b.kick()
我叫球B,谁踢我
我叫球B,谁踢我

上面我发现,类里面并没有先定义name这个属性,但是可以直接赋值,因为类是共有属性,对象可以有自己的私有属性例如

class ball:
    def setname(self,name):
        self.name=name
    def kick(self):
        print('我叫%s,谁踢我'% self.name)
a=ball()
a.setname('球A')
a.age=5
print(a.age)

竟然也没有报错,因为后面的age属于类a自己的私有属性,类是共有属性,如果再定义一个b出来,b就不会拥有age的属性
init()是特殊函数 吗?

class ball:
    def __init__(self,name):#这个函数有点特殊,这是构造函数吗
        self.name=name
    def kick(self):
        print('我叫%s,谁踢我'% self.name)
b=ball('土豆')
b.kick()
我叫土豆,谁踢我

可以上上面的对比来看,下面那个必须要参数,上面那个不能有参数

class ball:
    def __init__(self,name):#这个函数有点特殊,这是构造函数吗
        self.name=name
    def kick(self):
        print('我叫%s,谁踢我'% self.name)
b=ball()#不输形参会报错
b.kick()
class bal:
    def setname(self,name):
        self.name=name
    def kick(self):
        print('我叫%s,谁踢我'% self.name)
a=bal('tudou')#输入形参会报错

第一种报错

Traceback (most recent call last):
  File "D:/pycharm222/001.py", line 7, in <module>
    b=ball()
TypeError: __init__() missing 1 required positional argument: 'name'

第二种报错

Traceback (most recent call last):
  File "D:/pycharm222/001.py", line 14, in <module>
    a=bal('tudou')#输入形参会报错
TypeError: object() takes no parameters

Process finished with exit code 1

下一条是关于私有和公有的问题
python中没有private关键字,想要创建一个类私有的变量需要通过命名规则来实现

在变量名之前加两个下划线__name,则在类外部就不能直接通过实例.__name访问,具体原理python编译器将其命名修改为了_类名__name,通过 实例 ._类名__name还是可以访问

class person:
    name='bubble'
    def getname(self):
        return self.name
p=person()
print(p.name)
print(p.getname())
bubble
bubble

上面这样是公有的,外部可以访问

class person:
    __name='bubble'#千万记得是双下划线。。。。
    def getname(self):
        return self.__name
p=person()
print(p.getname())
print(p.name)
Traceback (most recent call last):
  File "D:/pycharm222/001.py", line 8, in <module>
    print(p.name)
AttributeError: 'person' object has no attribute '__name'

Process finished with exit code 1

上面这样会提示私有
可能是因为__name前面这个__就是表示私有
但是可以通过 实例._类名___变量名访问

class person:
    __name='bubble'
    def getname(self):
        return self.__name
p=person()
print(p._person__name)
#print(p.__name)

p._person__name跟个友元函数似的
不能修改的属性一般设置为静态常量的,只设置为私有不太行

038

继承
子类会继承父类的私有函数??

class parent:
    def hello(self):
        print('正在调用父类的方法')
class child(parent):
    #def hello(self):
        #print('正在调用子类的方法')
    pass
p=parent()
p.hello()
c=child()
c.hello()#多态了

正在调用父类的方法
正在调用父类的方法

然后修改一下(自己编译时出现的意外IndentationError缩进错误。。。 )

class parent:
    def hello(self):
        print('正在调用父类的方法')
class child(parent):
    def hello(self):
        print('正在调用子类的方法')
p=parent()
p.hello()
c=child()
c.hello()#多态了
正在调用父类的方法
正在调用子类的方法

两个继承方法 1.未绑定的父类方法 2.super
super在书中有提到
1.未绑定的父类方法

#网课看到
import random as r
class fish:
    def __init__(self):
        self.x=r.randint(0,10)
        self.y=r.randint(0,10)
    def move(self):
        self.x -=1
        print('我的位置是',self.x,self.y)
class goldfish(fish):
    pass
class carp(fish):
    pass
class salmon(fish):
    pass
class shark(fish):#子类重写了父类的方法,self.x不存在了
    def __init__(self):
        fish.__init__(self)#self是子类的实例对象,未绑定的父类方法
        self.hungery=True
    def eat(self):
        if self.hungery:
            print("天天吃")
            self.hungery=False
        else:
            print('你吃不下了')
fi=fish()
fi.move()
fi.move()
gold=goldfish()
gold.move()
gold.move()
gold.move()
shar=shark()
shar.move()
shar.eat()

因为子类重写了父类的方法 def init(self) 后,self.x不存在了,如果没有fish.init(self)就会报错,所以要加上才能找到父类的self才能继续进行shar.move()
2.super()不用给定任何基类的名字,自动能够找出对应的方法
class shark(fish):#super()使用时,就和这括号里面的fish有关,或者说,能够直接识别出你继承括号里继承的类

#网课看到
import random as r
class fish:
    def __init__(self):
        self.x=r.randint(0,10)
        self.y=r.randint(0,10)
    def move(self):
        self.x -=1
        print('我的位置是',self.x,self.y)
class goldfish(fish):
    pass
class carp(fish):
    pass
class salmon(fish):
    pass
class shark(fish):#super()使用时,就和这括号里面的fish有关
    def __init__(self):
        super().__init__()#这直接调用??不用给定任何基类的名字,自动能够找出对应的方法
        self.hungery=True
    def eat(self):
        if self.hungery:
            print("天天吃")
            self.hungery=False
        else:
            print('你吃不下了')


多重继承,了解即可

class base1:
    def foo1(self):
        print('我是1')
class base2:
    def fool2(self):
        print('我是2')
class C(base1,base2):
    pass
c=C()
c.foo1()
c.fool2()
我是1
我是2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值