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被删除

 

posted @ 2018-07-27 16:43  Hear7  阅读(218)  评论(0编辑  收藏  举报