【编程小知识杂记】Python中@property的用法

1 前言

在使用算法做预测的时候,发现以前写的代码使用了property,但当时未了解透彻其用法,因此这里做一下简单的小结。

@attr.s
class LGBConfig(object):
    @property
    def num_leaves(self):
        return self._num_leaves

    @num_leaves.setter
    def num_leaves(self, value):
        if not isinstance(value, int):
            raise ValueError('max_depth must be an integer!')
        self._num_leaves = 2 ^ int(value)

2 使用场景

@property是一个装饰器,其主要的作用有以下两点:

2.1 改变方法的使用方式

可以将方法像类的属性一样使用:

class Person(object):
    def __init__(self):
        self.height = 180
        
    @property  
    def arm_length(self):
        return self.height
    
person = Person()
person.arm_length
# 不使用property的话获取arm_length的方法为person.arm_length(),就会涉及到传参的问题

2.2 防止属性值被恶意修改

比如在类定义了保护成员 self._age,但是外面可以修改这个_age。为了不让类外的操作修改它,就可以使用property:

class Person(object):

	@property
	def age():
		return _age
# 这里不设置对应的setter,就起到了保护作用

# 而设置setter时候,也可以进行各种校验
	@age.setter
	def age(age_value):
		if not isinstance(age_value, int):
			raise ValueError('年龄必须是整数!')
		self._age = age_value

3 使用property的注意点

使用property需要注意以下两点:

  • 被property修饰的方法只有一个参数(self)
  • 它必须要有返回值

以下是本人独自运营的微信公众号,用于分享个人学习及工作生活趣事,大家可以关注一波。

优良率
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁣北潇

老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值