python关于静态属性, 类方法, 静态方法

本文深入探讨了Python中@property装饰器的使用方法,包括如何创建只读属性、可写属性和可删除属性,以及如何利用装饰器实现对类属性的访问控制和数据验证。

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

1.静态属性property
在类的函数属性前加@property可以让该函数以数据属性的方式调用.

注意:1. 静态属性不可传参数,(只有self)
2.类的实例默认无法修改静态属性
3.如果想对实例修改,调用静态属性做限制,可以用setter, getter, deleter,等装饰器.

示例1:property使用

class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    @property
    def cal1(self):
        return self.a + self.b

    @cal1.setter  # 利用此方法设置静态属性
    def cal1(self, value):
        print('hahaha', self, value)
        self.__dict__['cal1'] = value  # 直接操作字典,避免无限递归

    @cal1.getter  # 调用属性时触发,触发条件只与实例有关
    def cal1(self):
        print('get is running')
        return self.a + self.b

    @cal1.deleter
    def cal1(self):  # 删除静态属性时触发
        print('deleter is running')
        self.__dict__.pop('cal1')

t = Test('love', 'you')
print(t.cal1)
print(Test.cal1)
t.cal1 = 'sa'        # 而实例不可设置静态属性,除非有setter
#Test.cal1 = 'happy'  # 类可以设置静态属性
print(t.__dict__)
del t.cal1
print(t.__dict__)

#result
get is running
loveyou
<property object at 0x000001AD05B61B88>
hahaha <__main__.Test object at 0x000001AD05B6E0F0> sa
{'a': 'love', 'b': 'you', 'cal1': 'sa'}
deleter is running
{'a': 'love', 'b': 'you'}

示例2:静态属性设置的另一种格式(完全等价于示例1)

class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def setcal1(self, value):
        print('hahaha', self, value)
        self.__dict__['cal1'] = value  # 直接操作字典,避免无限递归

    def getcal1(self):
        print('get is running')
        return self.a + self.b

    def delcal1(self):  # 删除静态属性时触发
        print('deleter is running')
        self.__dict__.pop('cal1')

    cal1 = property(getcal1, setcal1, delcal1)


t = Test('love', 'you')
print(t.cal1)
print(Test.cal1)
t.cal1 = 'sa' 
print(t.__dict__)
del t.cal1
print(t.__dict__)  

#result
get is running
loveyou
<property object at 0x000002109EF61C28>
hahaha <__main__.Test object at 0x000002109EF6E128> sa
{'a': 'love', 'b': 'you', 'cal1': 'sa'}
deleter is running
{'a': 'love', 'b': 'you'} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值