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