Python进阶:property属性,with语句与上下文管理器

文章介绍了Python中@property的作用,如何通过装饰器和类属性方式创建getter、setter和deleter。同时,文章探讨了with语句的使用和其背后的上下文管理器概念,包括__enter__和__exit__方法在文件操作中的应用。
摘要由CSDN通过智能技术生成

property属性

作用

property的作用就是把类的方法当做属性来调用,是简化代码的一种方式。下面我们来一起瞧一瞧。

第一种方式:装饰器方式

  1. 在类的方法前加上@property即可像使用属性那样调用标记方法
  2. 定义一个与刚才@property同名的方法,并且标记方法名.setter,即可通过赋值方式传参
  3. 定义一个与刚才@property同名的方法,并且标记方法名.deleter,即可通过del 方法名执行相关操作

是不是很懵逼?来上代码!

class Wife(object):
    def __init__(self):
        self.__age = 18

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, real_age):
        self.__age = real_age

    @age.deleter
    def age(self):
        del self.__age

# 获取属性
w = Wife()
print(w.age)

# 给属性赋值
w.age = 10
print(w.age)

# 删除属性
del w.age

执行结果如下:

18
10

 类属性方式

类属性的方式很简单,就是使用property方法,该方法有两个参数传递两个方法,一个方法是用来获取值,另一个对应的是设置值。来上代码,一看就懂。

class Wife(object):
    def __init__(self):
        self.__age = 18

    def get_age(self):
        return self.__age

    def set_age(self, real_age):
        self.__age = real_age

    age = property(get_age, set_age)

# 获取属性
w = Wife()
print(w.age)

# 给属性赋值
w.age = 10
print(w.age)

执行结果与上面的一样。

With语句

特点

with的特点是既简单又安全,使用之前学过的文件操作来举个例子,正常文件的可能操作如下:

# 打开文件
f = open("C:/Users/huangkun/Desktop/2.txt", "r")
# 读取内容
print(f.readline())
# 关闭文件流
f.close()

这样的方式不仅复杂,并且读取出错的话可能会抛出异常,使用with如下:

with open("C:/Users/huangkun/Desktop/2.txt", "r") as f:
    print(f.readline())

从代码能看出with语句使用方式更加简洁,同时代码执行完毕或者出现异常with会自动关闭文件流,是不是既安全又简洁呐。那么with语句为什么这么强大呢?它的主要是来源于上下文管理器。

问题来了,啥是上下文管理器?

上下文管理器

定义

一个类如果实现了__enter__()方法与__exit__()方法,那么这个类的对象实例就可以被称为上下文管理器。

  1. __enter__():一般称为上文方法,返回一个操作对象,比如操作文件的对象
  2. __exit__():一般称为下文对象,一般处理一些收尾的事情。

with语句修饰上下文管理器之后,会先调用上文对象,再执行with语句中的内容,最后执行下文对象。来上代码,模拟下open方法做的事情各位就懂了。

class File:
    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)
        print("上文方法")
        return self.file

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("下文方法")
        self.file.close()

with File("1.txt", "r") as f:
    print(f.readline())

代码执行结果如下:

上文方法
文件内容
下文方法

 可以看到经过with语句修饰后代码的执行顺序,上文方法->with内容->下文方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值