Python中的@property说白了就是将方法当作属性来调用,这样做能使调用方法时简洁一点。
操作方法
class Person(object):
def __init__(self, name, age):
#两杠表示私有属性
#私有属性只能在类的内部修改
self.__name = name
self.__age = age
@property
def get_age_fun(self):
return self.__age
@get_age_fun.setter # get_age_fun是上面声明的方法
def set_age_fun(self, value):
if not isinstance(value, int):
raise ValueError('年龄必须是数字!')
if value < 0 or value > 100:
raise ValueError('年龄必须是0-100')
self.__age = value
def print_info(self):
print('%s: %s' % (self.__name, self.__age))
p = Person('balala',20)
p.__age = 17
print(p.__age) # 17
print(p.get_age_fun) # 20 注意这里不带()
#p.set_age_fun(35) 注意不能这样调用赋值了
p.set_age_fun = 35 # 这里set_age_fun 就是 声明的函数不带()
print(p.get_age_fun) # 35
print(p.print_info()) # balala: 35
我们可以看到用过@property之后,再调用方法的时候就像调用属性一样简单了,不需要加括号了。
常见情况
a.shape #求a的形状
这里的shape本来也是一个方法,加上@property后可以用调用属性的方式进行调用