属性property

# 属性初识
# class Bmi:
#     def __init__(self, name, weight, height):
#         self.weight = weight
#         self.name = name
#         self.height = height
#
#     @property   # 将一个方法伪装成属性,在代码本质上没有什么区别,但是在调用的时候显得更加合理
#     def bmi(self):
#         b = self.weight / self.height ** 2
#         if b < 18.5:
#             condition = "偏瘦"
#         elif b < 23.9:
#             condition = "正常"
#         elif b < 27:
#             condition = "过重"
#         else:
#             condition = "肥胖"
#         return "{}的bmi是{},{}".format(self.name, b, condition)
#
# bm = Bmi("ly", 50, 1.48)
# #不加property的调用方式  print(bm.bmi())
# print(bm.bmi)  # 将方法伪装成了属性
# print(bm.name)
# bm.name = "yan"
# print(bm.name)
# print(bm.bmi)
# #
# # ly的bmi是22.826880934989045,正常
# # ly
# # yan
# # yan的bmi是22.826880934989045,正常

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  # 如果对对象.age 进行赋值操作,这个函数自动执行
    def age(self,a1):
        if type(a1) is int:
            self.__age = a1
        else:
            print("输入有误,应该输入数字")
        # print(a1)
        # print(666)
    @age.deleter   # 执行del 操做时自动执行这个函数
    def age(self):
        print("............")
    
p1 = Person("dudu", 99)
# # print(p1.age())
# print(p1.age)
# p1.age = 66
# print(p1.age)

print(p1.age)
p1.age = 66
print(p1.age)

# property :类似与bmi这中看着像名词,但是需要具体计算的,就用property装饰器,伪装成属性
原文地址:https://www.cnblogs.com/yfjly/p/10592559.html