内置方法及常用模块
分类:
IT文章
•
2025-02-06 21:21:37
内置方法
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
View Code
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))
View Code
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 #执行我了
View Code
常用模块
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不支持多次写入然后读出
View Code
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
View Code
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
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]
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的大小