@property

想要访问一个类的某个属性
并且修改它
有下面三种方法

# 法1
class Demo(object):
    def __init__(self):
        self._name = "Demo"
        self.aim = "for fun"
        self.owner = "nobody"
        self.ownersage = 20
test = Demo()
print(test._name)
test._name = 123
print(test._name)


# 法2
class Demo(object):
    def __init__(self):
        self._name = "Demo"
        self.aim = "for fun"
        self.owner = "nobody"
        self.ownersage = 20

    def get_name(self):
        return self._name

    def set_name(self,value):
        if not isinstance(value, str):
            raise ValueError("name must be str")
        self._name = value

test = Demo()
print(test.get_name())
test.set_name(123)

#法3
class Demo(object):
    def __init__(self):
        self._name = "Demo"
        self.aim = "for fun"
        self.owner = "nobody"
        self.ownersage = 20

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

    @name.setter
    def name(self, value):
        if not isinstance(value,str):
            raise ValueError("name must be str")
        self._name = value

test = Demo()
print(test.name)
test.name = "haha"
print(test.name)

法1中,将name属性设置成了123,但是如果name必须是str类型怎么办?

所以法2中采用了set_name方法来解决这一问题,如果输入类型错误,则报错

但是这样太繁琐,特别是实例化后,还要通过instancename.get_name\set_name来获得\修改类属性

所以法3中采用了property修饰器:
def name(self)方法前面添加了@property,可以将这个方法修饰成一个属性。在需要访问类属性_name时,只需要通过instancename.name就能访问;与之对应的@name.setter也同样如此,只需要通过instancename.name = ???来进行修改类属性。

关于其他修饰器:tobecontinued

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值