python面向对象之属性
property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值
class Person: def __init__(self,name,height,weight): self.name = name self.__height = height self.__weight = weight @property # 装饰,将bim方法伪装成一个属性 def bmi(self): return "%s的BMI指数是%s" %(self.name,self.__weight / self.__height ** 2) p = Person("alex",1.8,70) print(p.bmi) #装饰伪装成一个属性 之后输出打印不必写 p.bmi()
为什么要用property
将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法擦觉自己
的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循l统一访问的原则
由于新式类中具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为
同一属性:获取,修改,删除
class Person: def __init__(self,name,age): self.name = name if type(age) is int: #判断年龄输入是否是数字 self.__age = age else: print("输入有误") @property def age(self): #获取属性 return self.__age @age.setter # 修改属性 def age(self,a1): if type(a1) is int: self.__age = a1 else: print("输入有误") @age.deleter # 删除属性 def age(self): del self.__age print(66) p1 = Person("alex",20) # print(p1.age) #或取属性,直接调用 # p1.age = 40 # 修改属性 # print(p1.__dict__) # 内部被修改{'name': 'alex', '_Person__age': 40} # print(p1.age) del p1.age # 删除属性 print(p1.__dict__) # {'name': 'alex'} __age被删除