python之中property用法的介绍,简单易懂

本文通过一个圆的类实例,讲解了Python中@property装饰器的使用,如何将方法转换为属性,实现属性自动更新相关联的值。通过修改半径或直径,程序会自动保持它们之间的正确比例关系,简化了代码逻辑。

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

看了一下知乎上一位网友关于property的提问,有位网友的回答说的很通俗易懂,转过来分享一波。
原文链接:看‘蟒蛇游戏爱好者’的回答

先看普通的例子

class Circle(object):
    def __init__(self, radius,diameter):
        self.radius = radius
        self.diameter = diameter

例子中,我定义一个圆圈类,直径(diameter),半径(radius)。

这样写没有问题,我们实例化的时候,比如

class Circle(object):
    def __init__(self, radius,diameter):
        self.radius = radius
        self.diameter = diameter


my_circle = Circle(2,4)

print('radius is {}'.format(my_circle.radius))
print('diameter is {}'.format(my_circle.diameter))


#change the radius into 6 
my_circle.radius = 6

print('radius is {}'.format(my_circle.radius))
print('diameter is {}'.format(my_circle.diameter))

看下运行结果

radius is 2
diameter is 4
radius is 6
diameter is 4

一开始的时候,我们让半径等于2,直径等于4。但是当更改半径时,必须手动把直径改为12,但我更希望,程序自己能在我把半径变成6的时候自动把直径变成12,或者当我需要改直径为10的时候,程序能把半径自动的变成5. 如果有这个需求的时候,@property就上场了。

class Circle(object):
    def __init__(self, radius):
        self.radius = radius

    @property
    def diameter(self):
        return self.radius * 2
    @diameter.setter
    def diameter(self, new_diameter):
        self.radius = new_diameter / 2


my_circle = Circle(2)

print('radius is {}'.format(my_circle.radius))
print('diameter is {}'.format(my_circle.diameter))


#change the radius into 6 
my_circle.radius = 6

print('radius is {}'.format(my_circle.radius))
print('diameter is {}'.format(my_circle.diameter))

#change the diameter into 6 
my_circle.diameter = 6

print('radius is {}'.format(my_circle.radius))
print('diameter is {}'.format(my_circle.diameter))

其实property是一个有点函数意思的attribute,两者虽然字面上一致,或者说翻译成中文意思上基本没差别,但使用上是完全俩个不同的东西。
我比较喜欢的另一个通俗易懂的解释是:把方法当属性用。
写在最后:当然property还有其他用法,@property、@方法名.setter、@方法名.deleter,不是本文分享内容,不多作介绍。

2020最后一天,rm -rf '所有烦恼 ',欧力给!!
谢谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值