open(name[, mode[, buffering]])
为了让用户在平常的编程和测试时保存复杂的数据类型,python提供了标准模块,称为pickle.
这个模块可以将几乎任何的python对象(甚至是python的代码),转换为字符串表示,这个过程称为pickling.
而要从里面重新构造回原来的对象,则称为unpickling.
在pickling和unpicking之间,表示这些对象的字符串表示,可以存于一个文件,也可以通过网络远程机器间传输。
如果你有一个对象friend,和一个已经打开并用于写的文件对象f,pickle这个对象最简单的方式就是使用:
pickle.dunmp(friend,f)
# Pickle模块读入任何Python对象,将它们转换成字符串,
然后使用dump函数将其转储到一个文件中——这个过程叫做pickling。
for each in f:
print(each)
当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
try:
s = None
if s is None:
print('s 是空对象')
raise NameError
print len(s)
exception TypeError:
print('空对象没有长度')
对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源(会自动关闭文件)
导入EasyGui
import easygui #使用EasyGui函数时,必须在函数的前面加上前缀
easygui:
easygui.msgbox(...)
2.导入整个EasyGui包:
from easygui import *
easygui.msgbox(...) #直接编写代码
import easygui as g:
g.msgbox(...)
使用EasyGui,建议不要在IDLE上运行,可能会发生冲突
属性:静态(特征等)
方法:动态(一个个函数)
python中类的命名约定为以大写字母开头
eg:
class One:
面向对象编程(oop)
面向对象 特征:封装、继承、多态
封装:信息隐蔽技术
继承:子类自动共享父类之间数据的方法和机制
多态:不同对象对同名方法响应不同的行动
继承:
>>>class Mylist(list):
pass
>>>list2 = Mylist()
>>>list2.append(5)
>>>list2.append(3)
>>>list2.append(7)
>>>list2
>>>[5,3,7]
>>>list2.sort()
>>>[3,5,7] #Mylist这个类继承了list方法
多态:
>>>class A:
def fun(self):
print('A')
>>>class B:
def fun(self):
print('B')
>>>a = A()
>>>b = B()
>>>a.fun()
>>>A
>>>b.fun()
>>>B #a,b调用同名的方法,但实现不一样,体现多态
self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
每个实例对象都有唯一的self参数
class Word:
def __init__(self,name):
self.name = name
def kick(self):
print('是%s' % self.name)
>>>b = Word('单词')
>>>b.kick()
>>>是单词
属性和方法公有
>>>class Num:
name = 'one'
>>>p = Num()
>>>p.name
>>>one
私有属性:
python并没有真正的私有属性
用__定义的属性,只是被改名换姓而已
用_定义的属性,意义在于唤起用户的注意,看成私有属性
>>>class Num:
__name = 'one'
>>>p.Num()
>>>p.__name
>>>p.name #会报错
改为:
class Num:
__name = 'one'
def getName(self):
return self.__name
>>>p.getName()
>>>one
>>>p._Num__name #_类名__变量名
>>>one
若子类与父类同名,会覆盖子类里父类的方法,子类对象调用的时候调用到覆盖后的新属性或方法,但对父类不受影响
class DerivedClassName子类(BaseClassName父类)
class Parent:
def hello(self):
print('正在调用父类方法')
class Child(Parent):
pass
>>>p = Parent()
>>>p.hello
>>>正在调用父类方法
>>>c = Child()
>>>c.hello()
>>>正在调用父类方法
不需要明确给出任何基类的名字,它会自动帮你找出所有基类以及对应的方法。由于你不用给出基类的名字,这就意味着你如果需要改变类继承关系,你只需要改变class语句里的父类即可,而不必在大量代码中去修改所有被继承的方法。
class DerivedClassName(Base1,Base2,Base3): #Base:多个父类名
class Base1:
def fo1(self):
print('1')
class Base2:
def fo2(self):
print('2')
class C(Base1,Base2)
pass
>>>c = C()
>>>c.fo1()
>>>1
>>>c.fo2()
>>>2
#缺点:易导致代码混乱
通过属性设置属性