栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2021

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021

Property和上下文管理器 1.property属性初识2.with语句的使用3.上下文管理器

1.property属性初识

property属性就是负责把一个方法当做属性进行使用 这样可以简化代码使用

定义property属性的两种方式 装饰器方式类属性方式
#1.装饰器
class Student(object):
 def __init__(self):
 #是由属性
 self.__age 10
 property #对象调用age属性时会执行下面的方法
 def age(self):
 print( 获取属性啦 )
 return self.__age
 #设置属性 方法名与获取属性方法名一致
 age.setter #当对象调用age属性设置值的时候回调用下面的方法
 def age(self,new_age):
 print( 设置属性了 )
 if new_age 0 and new_age 120:
 self.__age new_age
 else:
 print( 成精啦! )
#实例化对象
st Student()
# age st.age()
# print(age)# 10
#使用property
age st.age
print(age)# 获取属性啦 10
#设置属性值
st.age 23
age st.age
print(age)# 设置属性了 获取属性啦 23
# 2.类属性
class Student1(object):
 def __init__(self):
 self.__age 10
 def get_age(self):
 print( 获取属性的方法 )
 return self.__age
 def set_age(self,new_age):
 print( 设置属性的方法 )
 if new_age 0 and new_age 120:
 self.__age new_age
 else:
 print( 成精了 )
 #get_age 获取属性时执行的方法 set_age设置属性时用的方法
 age property(get_age,set_age)
st1 Student1()
age st1.age
print(age)# 获取属性的方法 10
#设置属性
st1.age 34
age st1.age
print(age)# 设置属性的方法 获取属性的方法 34
2.with语句的使用

文件使用完后必须关闭 因为文件对象会占用操作系统的资源 且操作系统同一时间能打开的文件数量也是有限的
由于文件读写有可能出现IOEror 一旦出现 后面的f.close()就不会调用
为了保证无论是出错都能正确关闭文件 可以使用rty…finally来解决
此种方法虽然运行良好 但代码过于繁琐 并需添加try-except-finallly 语句 不是很方便 也容易忘记
因此 python提供了一种with语句 既简单又安全 且with语句执行完成后会自动调用关闭文件操作 出现异常也会自动调用关闭文件

3.上下文管理器 第一种方法
一个类只要实现了__enter__()和__exit__()这两个方法 通过该类创建的对象我们就称为上下文管理器
上下文管理器可以使用with语句 with语句之所以这么强大 背后就是由上下文管理器做支撑 也就是说 使用的open函数创建的文件就是一个上下文管理器对象
 32.上下文管理器 
#在类里面实现__enter__和__exit__方法
#自定义上下文管理器类
class File(object):
 def __init__(self,file_name,file_mode,encoding):
 self.file_name file_name
 self.file_mode file_mode
 self.encoding encoding
 def __enter__(self):
 #上文方法 负责返回操作对象资源 比如 文件对象 数据库连接对象
 self.file open(self.file_name,self.file_mode,encoding self.encoding)
 return self.file
 def __exit__(self,exc_type,exc_val,exc_tb):
 #下文方法 负责释放对象资源 如 关闭文件 关闭数据库
 print( over )
 self.file.close()
#with语句结合上下文管理器对象使用
with File( a.txt , r ,encoding utf-8 )as f:
 f_data f.read()
 print(f_data)# python,人生苦短 我用python over
第二种方法
假如想让一个函数成为上下文管理器 python还提供了一个像contextmanager的装饰器,更进一步简化了上下文管理器的实现方式 通过yield将函数分割成两部分 yield上面的语句在__enter__方法中执行 yield下面的语句在__exit__方法中执行 紧跟yield后面的参数是函数的返回值
#使用装饰器实现上下文管理器
from contextlib import contextmanager
#将普通函数装饰成上下文管理器
 contextmanager
def my_open(file_name,file_mode):
 try:
 #返回操作对象
 file open(file_name,file_mode,encoding utf-8 )
 #yield关键字之前的代码可认为是上文方法 负责返回操作对象资源
 yield file
 except Exception as e:
 print(e)
 finally:
 #yield关键字后是下文 【负责释放对象操作资源
 print( over )
 file.close()
#普通函数不呢个结合with语句使用 with语句结合上下文管理器
#此方法 异常时不能关闭
# with my_open( a.txt , r )as f:
# f_data f.read()
# print(f_data)# python,人生苦短 我用python over
with my_open( a.txt , r )as f:
 f.write( dfd )# not writable over


女以色授 男以魂与 情投意合 心倾于侧。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号