析构函数
1 class My:#类 2 def __init__(self): 3 print('构造函数,类在实例化时,会自动执行它') 4 # self.client = pymongo.MongoClient(host='',port=27017) 5 def __del__(self):#析构函数,这个实例被销毁的时候自动执行 6 print('什么时候执行我呢') 7 # self.client.close()#自动关闭数据库和文件
析构函数在实例化后执行完所有程序会执行,但是可以选择在什么时候让它结束
m=My()
del m
私有的类和变量
1 class My:#类 2 3 def __say(self):#安全性更高 4 #函数名或变量名前面加__,这个函数或变量就是私有的,只能在类里面用,类外无法使用 5 print('3') 6 def cry(self):#带self实例方法 7 self.__say() 8 print('4')
私有防止多人写一个项目重复给一个变量赋值,导致原来的被覆盖
装饰器
装饰器,不改变原来的函数,给函数添加新功能,可以自己写,也有写好的
1 def timer(func): 2 def war(*args,**kwargs): 3 start= time.time() 4 res = func(*args,**kwargs) 5 end_time = time.time() 6 print('运行时间是%s'%(end_time-start)) 7 return res 8 return war
用装饰器下载下图的图片
1 import requests 2 @timer#用计时的装饰器 3 def down_img():#下载网页上的图片到本地 4 res = requests.get('http://www.nnzhp.cn:80/wp-content/uploads/2018/07/60f2add20f0659e27d26435f28b8472e.png') 5 open('a.png','wb').write(res.content) 6 down_img()
运行结果:
也可以传参有返回值
实例方法:
1 def cry(self):#带self是实例方法 2 self.__say() 3 print('4')
先实例化:m=My() 再调用:m.cry()
类方法:
1 @classmethod#装饰器,不改变原来的函数,给函数添加新功能 2 def eat(cls):#class 类方法 3 print(cls.country) 4 print('吃饭')
直接用类名调用:My.eat()
静态方法:
1 @staticmethod 2 def run(): 3 pass
直接用类名调用:My.run()
属性方法:
@property #属性方法 def red_pag(self): return 100 #调用时直接当做一个变量用,获取返回值
先实例化:m=My()
直接打印返回值:print(m.red_pag)