Python: 类装饰器@property和@staticmethod

import numpy as np
# 使用@property的目的:在__init__中,有一些属性需要计算才能得到,就把他们放在property中
# 使用@staticmethod的目的:将函数定义在class内,无需self

class hjw():
    def __init__(self) -> None:
        self.data = [1,2,3,4,5]

    @property
    def aver_data(self):
        return np.mean(self.data)
    
    @staticmethod
    def max_data(a):
        return np.max(a) + 3
a = hjw()
print(a.aver_data)         # 3.0
print(a.max_data(a.data))  # 8

 下面写的有点乱,主要有防止修改属性的内容,平时不用看

''' @property和@setter装饰器 '''
class hjw():
    def __init__(self) -> None:
        self._name = 'hyr'
        pass
    # 静态方法:就是定义在类中的函数,不需要self参数
    @staticmethod
    def hjwsum(a,b):
        return a+b+1
    
    # 变成了属性,不是方法,从而调用时不需要小括号,即hjw().p1
    # 主要用途:如果没有@setter,那么主要用于防止属性随意修改,因为__init__里面定义的,是可以任意修改的
    #          e.g. a = hjw()
    #               a._name = 'xxxxx'
    #               那么a._name这个属性,已经永久变成xxxxx了

    #               而如果只使用@property装饰器,那么a.name = 'xxxxx'就直接会报错


    #          如果有@setter,那么其实和__init__里面定义的是一样的
    @property
    def name(self):  # 这里的属性名才是真正想用的
        return self._name
    
    @name.setter
    def name(self,input):
        self._name = input
a = hjw()
print(a.hjwsum(3,4)) # 8


print(a._name) # hyr
print(a.name) # hyr

a.name = 'hjw'
print(a.name)  # hjw

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值