python3 property属性
学习链接::https://www.cnblogs.com/happyyangyanghappy/p/10917139.html
一、property的定义和调用
1、定义时,在实例方法上方加上@property装饰器;并且只有一个self参数(有其他参数会报错,亲自实践);
2、调用时,无需括号(类似于调用属性)。
__author__ = 'Administrator'
class Info():
@property
def height(self):
return "100斤"
obj=Info()
het=obj.height
print(het)
###########
100斤
二、定义property属性的两种方式
1装饰器
装饰器:
新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法
由于新式类中具有三种访问方式,我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除
__author__ = 'Administrator'
# class Info():
# @property
# def height(self):
# return "100斤"
#
# obj=Info()
# het=obj.height
# print(het)
class Bank(object):
def __init__(self):
self.ben_jin=10000
self.li_xi=0.1
@property
def total(self):
new_benjin_lixi=self.ben_jin+self.ben_jin*self.li_xi
return new_benjin_lixi
@total.setter
def total(self,benjin):
self.ben_jin=benjin
@total.deleter
def total(self):
del self.ben_jin
bank=Bank()
bank.total
bank.total=100000
print(bank.total)
del bank.total
##########################
110000.0
2.类属性:在类中定义值为property对象的类属性
【转自他人】
property方法中有个四个参数
第一个参数是方法名,调用 对象.属性 时自动触发执行方法;
第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法;
第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法;
第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息。
__author__ = 'Administrator' # class Info(): # @property # def height(self): # return "100斤" # # obj=Info() # het=obj.height # print(het) # class Bank(object): # def __init__(self): # self.ben_jin=10000 # self.li_xi=0.1 # # @property # def total(self): # new_benjin_lixi=self.ben_jin+self.ben_jin*self.li_xi # return new_benjin_lixi # # @total.setter # def total(self,benjin): # self.ben_jin=benjin # # @total.deleter # def total(self): # del self.ben_jin # # # bank=Bank() # bank.total # bank.total=100000 # print(bank.total) # del bank.total class Bank(object): def __init__(self): self.ben_jin=10000 self.li_xi=0.1 def get_total(self): new_benjin_lixi=self.ben_jin+self.ben_jin*self.li_xi return new_benjin_lixi def set_total(self,benjin): self.ben_jin=benjin def del_total(self): del self.ben_jin TOTAL=property(get_total,set_total,del_total,"银行利息,模仿别人的代码") bank=Bank() bank.TOTAL bank.TOTAL=100000 print(bank.TOTAL) description=Bank.TOTAL.__doc__ print("描述信息:",description) del bank.TOTAL ################# 110000.0 描述信息: 银行利息,模仿别人的代码
class Te(): def __init__(self): self.__num=100 def getNum(self): return self.__num def setNum(self,newNum): self.__num=newNum num=property(getNum,setNum) t=Te() print("===========",t.getNum()) t.num=200#相当于调用了t.setNum() print("相当于调用了t.getNum()",t.num) t.setNum(250) print("===========",t.getNum()) #注意点: # t.unm 到底是调用了getNum()还是getNum(),要根据实际的场景来判断 # 1.如果是给t.num赋值,那么就一定是调用了setNum() # 2.如果是获取t.num就一定是调用getNum() # property的作用:相当于把方法进行了封装,开发者在对属性设置数据的时候更方便 ################# =========== 100 相当于调用了t.getNum() 200 =========== 250


浙公网安备 33010602011771号