Python中的@property装饰器

本文深入探讨了Python中@property装饰器的使用方法,包括如何将类的方法转换为属性,实现类似变量的赋值、获取和删除操作。同时,介绍了通过内置的property()函数实现相同功能的另一种方式,提供了详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.介绍
  • python内置的@property装饰器可以把类的方法伪装成属性调用的方式。即将原来Foo.func()的调用方法,变成Foo.func的方式。
	class People:
		def __init__(self, name, age):
			self.name = name
			self.age = age
			
		@property
		def age(self):
			return self.__age
			
		@age.setter
		def age(self,age):
			if isinstance(age,int):
				self.__age = age
			else:
				raise ValueError
				
		@age.deleter
		def age(self):
			print("删除数据")
			
	obj = People("curry", 31)
	print(obj.age)
	obj.age = 19
	print(obj.age)
	del obj.age
  • 将一个方法伪装成为属性后,就不再使用圆括号的调用方式了。而是类似变量的赋值、获取和删除方法了。当然,每个动作内部的代码细节还是需要自己根据实际的需求去实现。
  • 将一个普通的方法转换为一个“伪装”的属性的步骤
    • a.在普通方法的基础上添加@property装饰器,例如上面的age()方法。这相当于一个get方法,用于获取值,决定类似"result = obj.age"执行什么代码。该方法仅有一个self参数。
    • b.写一个同名的方法,添加@xxx.setter装饰器(xxx表示和上面方法一样的名字,如上面的age()方法),比如例子中的第二个方法。这相当于编写了一个set方法,提供赋值功能,决定类似"obj.age = …"的语句执行什么代码。
    • c.再写一个同名的方法,并添加@xxx.deleter装饰器,比如例子中的第三个方法。用于删除功能,决定"del obj.age "这样的语句具体执行什么代码。
  • 总结:就是分别将三个方法定义为对同一个属性的获取、修改和删除。还可以定义只读属性,也就是只定义getter方法,不定义setter方法就是一个只读属性。
2.property()函数
  • 除了使用装饰器的方式将一个方法伪装成属性外,Python内置的builtins模块中的property()函数,为我们提供了第二种设置类属性的手段。
	class People:
	
	    def __init__(self, name, age):
	        self.__name = name
	        self.__age = age
	
	    def get_age(self):
	        return self.__age
	
	    def set_age(self, age):
	        if isinstance(age, int):
	            self.__age = age
	        else:
	            raise ValueError
	
	    def del_age(self):
	        print("删除年龄数据!")
	
	    # 核心在这句
	    age = property(get_age, set_age, del_age, "年龄")    # 此句是将一个方法伪装成为属性,其效果和装饰器的方法是一样的!
	    print(obj.age)
	    
	obj.age = 19
	print("obj.age:  ", obj.age)
	del obj.age
  • property()函数参数说明:
    • 第一个参数是方法名,调用 get 实例.属性 时自动执行的方法
    • 第二个参数是方法名,调用 set 实例.属性 = XXX时自动执行的方法
    • 第三个参数是方法名,调用 del 实例.属性 时自动执行的方法
    • 第四个参数是字符串,调用 实例.属性.__doc__时的描述信息
3.参考博客
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值