内置方法
1,__new__构造方法
__init__初始化方法
在类实例化一个对象的过程中,会先自动调用___new__方法,在内存中开辟一个对象空间,里面有对象指针,然后自动调用__init__方法,在对象空间封装属性。
应用:
设计模式——单例模式
1 class Foo: 2 __a=None 3 def __init__(self,name): 4 self.name=name 5 def __new__(cls,*args): 6 if cls.__a ==None: 7 cls.__a = object.__new__(cls) 8 return cls.__a 9 a=Foo("zhou") 10 b=Foo("cheng") 11 print(a.name,b.name) #cheng cheng 12 print(id(a),id(b)) #2756526876600 2756526876600
2,__len__
当类中用__len__方法,对象可以用len函数
3,__hash__
应用:字典寻址,字典去重
4,__eq__
1 class Staff: 2 def __init__ (self,name,age,sex): 3 self.name=name 4 self.age=age 5 self.sex=sex 6 def __hash__(self): 7 return hash(self.name+self.sex) 8 def __eq__(self,object): 9 if self.name == object.name and self.sex== object.sex: 10 return True 11 name_list = ["a","b","c","d"] 12 staff_list=[] 13 for i in range(20,51): 14 a=Staff(name_list[i%4],i,"male") 15 staff_list.append(a) 16 print(set(staff_list))
5,__del__
析构方法
当对象被释放时,会自动调用该方法
1 class Foo: 2 def __init__ (self,name,age): 3 self.name = name 4 self.age = age 5 def __del__(self): 6 print('执行我了') 7 a=Foo("zhou",20) 8 del a #执行我了
常用模块
1,序列化模块 将其他的数据类型转化成字符串或者bytes类型
1,json
优点:支持所有的编程语言
缺点:支持的数据类型比较少, int,str,list,dict 字典类型的key必须是str
1 import json 2 a=dict(a=1,b=2) 3 b=json.dumps(a) 4 print(b) #{"a": 1, "b": 2} 5 c=json.loads(b) 6 print(c) #{'a': 1, 'b': 2} 7 8 f=open("zc",mode="w") 9 json.dump(a,f) #写入文件 10 f=open("zc",mode="r") 11 print(json.load(f)) #{'a': 1, 'b': 2} 12 13 f=open("zc",mode="a") 14 json.dump(a,f) 15 f=open("zc",mode='r') 16 json.load(f) #报错,json不支持多次写入然后读出
2,pickle
1 import pickle 2 class Foo: 3 def __init__(self,name): 4 self.name=name 5 a=Foo("zhou") 6 b=Foo('cheng') 7 p1=pickle.dumps(a) 8 print(p1) #b'x80x03c__main__ Foo qx00)x81qx01}qx02Xx04x00x00x00nameqx03Xx04x00x00x00zhouqx04sb.' 9 p2=pickle.loads(p1) 10 print(p2.name) #zhou 11 12 f=open("zc",mode="ab") 13 pickle.dump(a,f) 14 pickle.dump(b,f) 15 f=open("zc","rb") 16 print(pickle.load(f).name) #zhou 17 print(pickle.load(f).name) #cheng
2,时间模块
time
三种形式:时间戳,结构化时间,格式化时间
1 import time
2 timestmp=150000000
3 structtime=time.localtime(timestamp)
4 print(structtime)#time.struct_time(tm_year=2065, tm_mon=1, tm_mday=24, tm_hour=13, tm_min=20, tm_sec=0, tm_wday=5, tm_yday=24, tm_isdst=0)
5 strtime=time.strftime("%Y-%m-%d",structtime)
6 print(strtime)#2065-01-24
7
8 strtime="2025-12-17"
9 structtime=time.strptime(strtime,"%Y-%m-%d")
10 print(structtime)#time.struct_time(tm_year=2025, tm_mon=12, tm_mday=17, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=351, tm_isdst=-1)
11 timestamp=time.mktime(structtime)
12 print(timestamp)#1765900800.0
3,随机数模块
random
1 import random 2 随机小数 3 print(random.random())#0.2958731515377837 4 print(random.uniform(3,5))#3.657970822860362 5 随机整数 6 print(random.randint(1,9))#4,可以取到9 7 print(random.randrange(1,2))#1,取不到2 8 print(random.choice([1,2,4])) #1 9 列表取值 10 print(random.sample([1,3,5,7,9],3))#[1, 5, 9],可以取多个数 11 a=list(range(10)) 12 打乱顺序,打乱的是原列表 13 random.shuffle(a) 14 print(a)#[2, 6, 7, 9, 0, 8, 5, 1, 3, 4]
4.os 和操作系统相关
1 os.makedirs('dirname1/dirname2') 可生成多层递归目录 2 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 3 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname 4 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 5 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 6 os.remove() 删除一个文件 7 os.rename("oldname","newname") 重命名文件/目录 8 os.stat('path/filename') 获取文件/目录信息 9 10 os.system("bash command") 运行shell命令,直接显示 11 os.popen("bash command).read() 运行shell命令,获取执行结果 12 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 13 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 14 15 16 os.path 17 os.path.abspath(path) 返回path规范化的绝对路径 18 os.path.split(path) 将path分割成目录和文件名二元组返回 19 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 20 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素 21 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 22 os.path.isabs(path) 如果path是绝对路径,返回True 23 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 24 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 25 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 26 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 27 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 28 os.path.getsize(path) 返回path的大小
5,sys 与解释器交互
sys.modules 查看当前内存空间中所有的模块,和这个模块的内存空间