property、with语句、上下文管理器
1. property
1. 定义
property属性就是负责把一个方法当作属性进行使用,这样做可以简化代码使用。
2. 方式
- 装饰器方式
class Student(object): def __init__(self): self.__age = 0 # 当对象调用age属性的时候会调用下面的方法 @property def age(self): return self.__age # 对象调用age属性设置值的时候会调用下面的方法 @age.setter def age(self, new_age): self.__age = new_age # ※使用装饰器方式的property属性,方法名要保持一致。 student = Student() print(student.age) student.age = 18 print(student.age) # 输出结果 0 18
- 类属性方式
class Student(object): def __init__(self): self.__age = 0 def get_age(self): """当获取age属性的时候会执行该方法""" return self.__age def set_age(self, new_age): """当设置age属性的时候会执行该方法""" self.__age = new_age # 类属性方式的property属性 age = property(get_age, set_age) # ※使用装饰器方式的property属性,方法名要保持一致。 student = Student() print(student.age) student.age = 18 print(student.age) # 输出结果 0 18
2. with语句
1. 使用
# 当with语句执行完成,那么关闭文件操作自动完成,即使有异常也会关闭文件
with open("1.txt", "r") as file:
print(file.readline())
3. 上下文管理器
1. __enter__和__exit__实行上下文管理器
# 自定义上下文管理器类
class File(object):
def __init__(self, file_name, file_mode):
self.file_name = file_name
self.file_mode = file_mode
def __enter__(self):
"""上文方法:打开文件"""
self.file = open(self.file_name, self.file_mode)
return self.file
# with语句执行完成之后,自动执行下文方法
def __exit__(self, exc_type, exc_val, exc_tb):
"""下文方法:关闭文件"""
self.file.close()
with File("1.txt", "r") as file:
print(file.readline())
2. 装饰器实现上下文管理器
from contextlib import contextmanager
# 加上装饰器这个代码,那么下面函数创建的对象就是一个上下文管理器
@contextmanager
def my_open(file_name, file_mode):
try:
file = open(file_name, file_mode)
# yield关键字之前的代码可以认为是上文方法,负责返回操作对象资源
yield file
except Exception as e:
print(e)
finally:
# yield关键字之后的代码可以认为是下文方法,负责释放操作对象的资源
file.close()
with my_open("1.txt", "r") as f:
print(f.readline())