内置方法及常用模块

内置方法

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

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
View Code

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]
View Code

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的大小
View Code

5,sys   与解释器交互

  sys.modules  查看当前内存空间中所有的模块,和这个模块的内存空间

  

 
原文地址:https://www.cnblogs.com/ruoxiruoxi/p/9588191.html