浅谈Python中的 property属性
来源:互联网 发布:linux重启tomcat命令 编辑:程序博客网 时间:2024/06/09 09:59
1.什么是property属性
一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法
class Foo: def func(self): pass # 定义property属性 @property def prop(self): pass"""调用"""foo_obj = Foo()foo_obj.func() # 调用实例方法foo_obj.prop # 调用property属性
2.property属性的调用需要注意以下几点
- 定义时,在实例方法的基础上添加@property装饰器,并且仅有一个self参数
- 调用时,不需要添加()
3.property属性的两种方式
- 装饰器,即在方法上使用装饰器
- 类属性,即在类中定义值为property对象的类属性
3.1 装饰器方式
在类的实例方法上应用@property装饰器Python中的类有经典类和新式类,新式类的属性比经典类的属性丰富。( 如果类继object,那么该类是新式类 )Python 2.x中默认都是经典类,只有显式继承了object才是新式类Python 3.x中默认都是新式类,不必显式的继承object
经典类,具有一种@property装饰器
class Goods: # 定义property 属性 @property def price(self): return "zhaosi""""调用"""obj = Goods()result = obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值print(result)
新式类,具有三种@property装饰器
class Goods: """python3中默认继承object类 以python2、3执行此程序的结果不同,因为只有在python3中才有@xxx.setter @xxx.deleter """ @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 方法
由于新式类中具有三种访问方式,我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除
3.2 类属性方式,创建值为property对象的类属性
当使用类属性的方式创建property属性时,经典类和新式类无区别
class Foo: def get_bar(self): return 'zhaosi' BAR = property(get_bar)obj = Foo()reuslt = obj.BAR # 自动调用get_bar方法,并获取方法的返回值print(reuslt)
property方法中有个四个参数
- 第一个参数是方法名,调用 对象.属性 时自动触发执行方法
- 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法
- 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法
- 第四个参数是字符串,调用 对象.属性.doc ,此参数是该属性的描述信息
class Foo(object): def get_bar(self): print("getter...") return 'zhaosi' def set_bar(self, value): """必须两个参数""" print("setter...") return 'set value' + value def del_bar(self): print("deleter...") return 'zhaosi' BAR = property(get_bar, set_bar, del_bar, "description...")obj = Foo()obj.BAR # 自动调用第一个参数中定义的方法:get_barobj.BAR = "alex" # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入desc = Foo.BAR.__doc__ # 自动获取第四个参数中设置的值:description...print(desc)del obj.BAR # 自动调用第三个参数中定义的方法:del_bar方法
由于类属性方式创建property属性具有3种访问方式,我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除
阅读全文
0 0
- 浅谈Python中的 property属性
- Python 中的 property 属性
- Python 中的 property 属性
- Python 中的 property 属性
- python中的property属性及魔法属性
- python Property属性用法
- python Property属性用法
- python Property属性用法
- python property属性
- Python property,属性
- python Property属性用法
- python---property属性
- python-@property 属性
- Python属性函数property
- Delphi 中的属性property
- VB中的属性 Property
- property中的copy属性
- Python中的property()
- 【NOI2015 Day1】软件包管理器
- Java是解释型还是编译型?
- Python的With学习
- 解决应用服务器集群的Session问题
- Java数组与内存控制(转)
- 浅谈Python中的 property属性
- Java程序员应该了解的10个面向对象设计原则
- [DOM] 什么是 DOM
- java面向对象总结(一)
- 图片、文件等上传与下载
- Java面向对象总结(二)(转)
- 深入了解Java可变长度的参数(Varargs)
- java继承和组合
- 国外JAVA与IT技术网站地址