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=10legs=4shell=Truemouth='大嘴'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=namedef 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=namedef 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=namedef 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=namedef kick(self):print('我叫%s,谁踢我'% self.name)
b=ball('土豆')
b.kick()
我叫土豆,谁踢我
可以上上面的对比来看,下面那个必须要参数,上面那个不能有参数
class ball:def __init__(self,name):#这个函数有点特殊,这是构造函数吗self.name=namedef kick(self):print('我叫%s,谁踢我'% self.name)
b=ball()#不输形参会报错
b.kick()
class bal:def setname(self,name):self.name=namedef 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 parametersProcess 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 -=1print('我的位置是',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=Truedef eat(self):if self.hungery:print("天天吃")self.hungery=Falseelse: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 -=1print('我的位置是',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=Truedef eat(self):if self.hungery:print("天天吃")self.hungery=Falseelse: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
Python新手学习(十)相关推荐
- 怎么学python入门?python新手学习路线
怎么学python入门?python新手学习路线,Python入门应该了解一些基本的计算机编程术语.Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,Python 的设计具 ...
- Python的学习(十六):对文件的操作
Python的学习(十六):对文件的操作 编码格式的介绍 Python中的解释器使用的是Unicode(内存) .py文件在磁盘上使用UTF-8存储(外存) 如何修改文件格式?不写的话默认为UTF-8 ...
- Python深度学习十大核心算法!
深度学习已经成为了一种热门的技术,它的应用领域正在不断扩大.在深度学习中,有一些核心的算法是非常重要的,这些算法为深度学习的应用提供了强大的基础.在本文中,我们将介绍基于Python深度学习的十大核心 ...
- python切片语法-Python新手学习基础之数据类型——字符串的切片截取
切片截取是python中字符串常见的一些操作,我们会在这篇文章里详细介绍,切片截取的作用是获取子字符或子字符串. 实际上,我们要做的就是使用索引,用冒号分隔两个索引,形式为:变量[头下标:尾下标],冒 ...
- Python新手学习基础之数据类型——字符串的切片截取
切片截取是Python中字符串常见的一些操作,我们会在这篇文章里详细介绍,切片截取的作用是获取子字符或子字符串. 实际上,我们要做的就是使用索引,用冒号分隔两个索引,形式为:变量[头下标:尾下标],冒 ...
- python基础学习十四:面向对象三大特性之继承
一.继承的基本概念 Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法,具体如下: # ⽗类A class A(object):def __init__(self ...
- Python新手学习基础之数据结构-序列2
长度.最大值和最小值 序列类型的数据结构,常常会用到长度检查.最大最小值检查的函数. 他们的作用: len(序列):返回列表的长度(元素个数): max(序列) :返回列表中元素最大值: min(序列 ...
- Python新手学习基础之运算符——位运算
位运算符 位运算实际上是把数字看作二进制来进行计算,它的运算法则如下: 结合实例,来看下位运算是如何进行的吧: 位运算在实际应用中用途很广泛,比如我们经常听到的子网掩码,它其实就是和IP地址做了按位与 ...
- Python新手学习(三)
11.判断(布尔) 检查是否相等和不相等,对于字符串来说,大小写也是需要注意的点,大小写不同会被判断为不相等. laptop='dell' print(laptop=='dell') print(la ...
- python新手学习记录笔的控制7,成果(使用python画小黄人)
# pip install turtle(先安装库) import turtle # import 库名 导入库# 设置画布 # turtle.setup(800,800)# 设置画笔的速度 turt ...
最新文章
- 代码注释//_您应该停止编写//的五个代码注释,并且//应该开始的一个注释
- 第五百六十四天 how can I 坚持
- 如何将java.util.Date转换为java.sql.Date?
- MySQL常用存储引擎之CSV
- setitimer 创建两个定时器_UE4 Timer(定时器)相关源码分析
- DrawTool画笔之图形笔
- Linux之nc命令
- .NET Remoting 经典远程回调模型(二)
- 每日算法系列【LeetCode 153】寻找旋转排序数组中的最小值
- IDEA配置JUnit进行单元测试
- SharePoint 网站登录不上,3次输入用户名/密码白页
- HFSS仿真结果导出为SNP文件
- php 只取汉字,php怎么只保留汉字
- 扁平化设计与思维导图
- 现场直击CGCA2022中国消费品行业CIO大会
- css3立方体实现方式(position+transform)
- 前端基础第二天——HTML5基础
- 元旦给计算机老师的贺卡,元旦贺卡给老师的祝福语(精选50句)
- Metallurgical and Materials Transactions A (MMTA)这个期刊怎么样?
- VisualRules
热门文章
- java openxml word_OpenXml读取word内容的实例
- Android申请相机权限
- Android原生态实现分享转发功能(分享图片到其他APP)
- Linux网络命令合集
- DOS BAT脚本批量打开Edge网页
- 网红护眼色——豆沙绿
- PS利用色彩范围抠图
- 电容或电感的电压_电压和电流的超前与滞后,你能说清楚吗?
- 互联网晚报 | 7月16日 星期六 |抖音回应“外卖功能上线”;上半年国内生产总值同比增长2.5%;雷军8月将携小米工程样车亮相...
- OpenKG开源系列 | 轻量级知识图谱抽取开源工具OpenUE