python之property属性

博客介绍了一种需通过对象其他属性求出的属性,以BMI为例,说明其虽类似属性却无属性功能且不可赋值。为让用户有更好体验,可使用property将其当作属性,还能通过@property装饰进行扩展,实现类似赋值功能。

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

一个需要对象其他属性求出来的属性。

解释一下 比如bmi是人的一个属性,和身高、体重都是一样的性质,但是组要身高和体重进行求职。

class People:
    def __init__(self,name,weight,height):
        self.name = name
        self.weight = weight
        self.height = height

    def bmi(self):
        return self.weight/(self.height**2)


p = People('alex',75,1.81)

在上个栗子中,想要取得bmi只能写成: p.bmi() 。 但是我们想要把bmi作为一个属性

让用户感觉不到我们使用bmi() 而是把bmi作为一个属性。

 

因此,bmi看起来虽然像一个属性,但是没有属性所具有的功能,不可以赋值。

 

class People:
    def __init__(self,name):
        self.__name = name

    def get_name(self):
        return self.__name

    @property
    def name(self):
        return self.__name

p= People("egon")
print(p.get_name())
print(p.name)

我们想取的是名字,所以最好的体验应该是p.name。使用property就可以实现。想实现类似赋值的功能,也可以写一个接口

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self,value):
        if not isinstance(self,value):
            print('名字必须是字符串类型')
            return
        self.__name=value
    @name.deleter
    def name(self):
        print("NO")

因为已经用@property装饰过name,因此可以用这个进行扩展,可以将name看多property的别称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值