属性

 

class B:
    def __init__(self,name, weight, height):

        self.name = name
        self.weight = weight
        self.height = height

    @property
    def bmi(self):
        print(666)
        return self.weight / self.height ** 2


gouge = B('曾二狗', 55, 1.67)
print(gouge.bmi)

# bmi看起来应该是一个名字,但是你用一个方法去实现
# property:是将方法伪装成一个属性,虽然在代码层面上没有提升,
# 但是他会让你的代码看起来更合理。
加上@property就是为了在
print(gouge.bmi)的时候就不用在里面加()了。

class B:
    def __init__(self,name, weight, height):

        self.name = name
        self.weight = weight
        self.height = height

    @property
    def bmi(self):
        print(666)
        return self.weight / self.height ** 2


gouge = B('曾二狗', 55, 1.67)
print(gouge.bmi)

# bmi看起来应该是一个名字,但是你用一个方法去实现
# property:是将方法伪装成一个属性,虽然在代码层面上没有提升,
# 但是他会让你的代码看起来更合理。
class Foo:

    def __init__(self,name):
        self.name = name
    @property   # ***
    def AAA(self):
        print('get的时候运行我啊')

    @AAA.setter  # *
    def AAA(self,value):

        print('set的时候运行我啊')

    @AAA.deleter  # *
    def AAA(self):
        print('delete的时候运行我啊')
obj = Foo('alex')
# obj.name = '太白'
# print(obj.name)
# del obj.name
# print(obj.name)
# obj.AAA
obj.AAA = 666  # 对伪装的属性进行改值是就会调用 def AAA(self,value):
del obj.AAA  

 

 

做一个卖苹果的例子:

苹果:原始价位8元,折扣价格:0.8,计算实际价格
class Product:

    def __init__(self, name, origin_price, discount):
        self.name = name
        self.__origin_price = origin_price
        self.__discount = discount
    @property
    def price(self):
        return self.__origin_price * self.__discount

    @price.setter
    def price(self, new_price):
        self.__origin_price = new_price
apple = Product('苹果', 8, 0.95)
# print(apple.price)
apple.price = 7
print(apple.price)

 

 

posted @ 2018-11-20 12:54  小菜鸟111  阅读(146)  评论(0编辑  收藏  举报