装饰器 即:在⽅法上应⽤装饰器 类属性 即:在类中定义值为property对象的类属性 1.新式类,具有三种@property装饰器:class Goods:@propertydef price(self):print("@property")@price.setterdef price(self,value):print("@price.setter")@price.deleterdef price(self):print("@price.deleter")obj = Goods()obj.price#自动执行 @property 修饰的 price 方法并获取方法obj.price = 123#自动执行@price.setter 修饰的price方法 并将123赋值给参数del obj.price#自动执行 @price.deleter 修饰的price方法 注意 经典类中的属性只有⼀种访问⽅式,其对应被 @property 修饰的⽅法 新式类中的属性有三种访问⽅式,并分别对应了三个被@property、@⽅ 法名.setter、@⽅法名.deleter修饰的⽅法 2.类属性⽅式,创建值为property对象的类属性当使⽤类属性的⽅式创建property属性时, 经典类 和 新式类 ⽆区别 class Foo(object):def get_bar(self):print("getter...")return "laowang"def set_bar(self,value):print("setter...")return "set value" + valuedef del_bar(self):print("deleter...")return "laowang"BAR = property(get_bar,set_bar,del_bar,"description...")obj = Foo()obj.BAR#自动调用第一个参数中定义的方法:get\_barobj.BAR = "alex"#自动跳用第二个参数中定义的方法:set_bar方法 并将"alex"当做参数传入desc = Foo.BAR.__doc__#自动获取第四个参数中设置的值:descrepationprint(desc)del obj.BAR#自动调用第三个参数中定义的方法:del_bar方法 property⽅法中有个四个参数 第⼀个参数是⽅法名,调⽤ 对象.属性 时⾃动触发执⾏⽅法 第⼆个参数是⽅法名,调⽤ 对象.属性 = XXX 时⾃动触发执⾏⽅法 第三个参数是⽅法名,调⽤ del 对象.属性 时⾃动触发执⾏⽅法 第四个参数是字符串,调⽤ 对象.属性.__doc__ ,此参数是该属性的描述信息 综上所述: 定义property属性共有两种⽅式,分别是【装饰器】和【类属性】,⽽【装饰器】⽅式针对经典类和新式类⼜有所不同。 通过使⽤property属性,能够简化调⽤者在获取数据的流程
|