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)