描述器@property的两种方法:装饰器和类属性

    科技2025-06-12  22

    property分为两种方式

    装饰器 即:在⽅法上应⽤装饰器,被装饰的方法拥有setter,deleter属性 使用装饰方法的属性:方法.setter、方法.deleter 装饰被装饰的方法名 三个装饰器:@property、@方法.setter、@方法.deleter装饰的方法名一样,实现功能不一样

    类属性 即:在类中定义值为property对象的类属性

    1.新式类,具有三种@property装饰器:

    class Goods: @property def price(self): print("@property") @price.setter def price(self,value): print("@price.setter") @price.deleter def 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修饰的⽅法 proper装饰器的装饰的方法名是一样的

    2.类属性⽅式,创建值为property对象的类属性 当使⽤类属性的⽅式创建property属性时, 经典类 和 新式类 ⽆区别 property类属性引用的方法名不一样

    class Foo(object): def get_bar(self): print("getter...") return "laowang" def set_bar(self,value): print("setter...") return "set value" + value def del_bar(self): print("deleter...") return "laowang" BAR = property(get_bar,set_bar,del_bar,"description...") obj = Foo() obj.BAR#自动调用第一个参数中定义的方法:get\_bar obj.BAR = "alex"#自动跳用第二个参数中定义的方法:set_bar方法 并将"alex"当做参数传入 desc = Foo.BAR.__doc__#自动获取第四个参数中设置的值:descrepation print(desc) del obj.BAR#自动调用第三个参数中定义的方法:del_bar方法

    property⽅法中有个四个参数 第⼀个参数是⽅法名,调⽤ 对象.属性 时⾃动触发执⾏⽅法 第⼆个参数是⽅法名,调⽤ 对象.属性 = XXX 时⾃动触发执⾏⽅法 第三个参数是⽅法名,调⽤ del 对象.属性 时⾃动触发执⾏⽅法 第四个参数是字符串,调⽤ 对象.属性.doc ,此参数是该属性的描述信息

    综上所述: 定义property属性共有两种⽅式,分别是【装饰器】和【类属性】,⽽【装饰器】⽅式针对经典类和新式类⼜有所不同。 通过使⽤property属性,能够简化调⽤者在获取数据的流程

    Processed: 0.010, SQL: 8