通过实例了解python property属性_python

来源:脚本之家  责任编辑:小易  

可以用 isinstance(s,myclass)来判断如果是s是mycalss的实例,返回True,否则返回Falsewww.zgxue.com防采集请勿采集本网。

这篇文章主要介绍了通过实例了解python property属性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

如果我们通过实例a操纵cls_j中的数据(注意不是cls_j本身),又会怎么样呢: 复制代码 代码如下: a.cls_j['a']= 'a' a._dict_ {'instance_j':{},'cls_i':1,'instance_i': 0} A._dict_ {'_init_':,'_module

1. 什么是property属性

首先是基础理论,涉及到数学,概率,信号处理,机器学习等领域。基础只能慢慢积累。至于工具,入门的有PIL,但是PIL对底层像素操作支持的不好,只适合做效果。python科学计算,Numpy是基础,然后

一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法

用python自己的zip库:zlib 或 zipfile 后一个比较高级,推进。具体用法看这篇博文 http://blog.chinaunix.net/u1/39578/showart_356627.html import zipfile,os z=zipfile.ZipFile(filename,'w'

# ############### 定义 ###############class Foo: def func(self): pass # 定义property属性 @property def prop(self): pass# ############### 调用 ###############foo_obj = Foo()foo_obj.func() # 调用实例方法foo_obj.prop # 调用property属性

在你实例化Bird时,bird已经拥有变量song,且其值为Squaawk!bird.sing()调用方法sing打印当前对象的变song,即Squaawk!self.song句的意思:self是指当前对象,即你实例化的Bird对象bird

如下的例子用于说明如何定一个简单的property属性:

当实例对象调用init时,每个实例对象都拥有了自己的变量a,你再也无法再通过实例对象来访问到类变量了。事实上这种写法是很不好的。这时你可以再一次显示类变量, print Men.a,newmen1.a,newmen2 0 1 2

class Goods(object): @property def size(self): return 100 g = Goods()print(g.size)

property属性的定义和调用要注意一下几点: 定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数 调用时,无需括号

2. 简单的实例

对于京东商城中显示电脑主机的列表页面,每次请求不可能把数据库中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求数据时就要显示的指定获取从第m条到第n条的所有数据 这个分页的功能包括: 根据用户请求的当前页和总数据条数计算出 m 和 n 根据m 和 n 去数据库中请求数据

# ############### 定义 ###############class Pager: def __init__(self, current_page): # 用户当前请求的页码(第一页、第二页...) self.current_page = current_page # 每页默认显示10条数据 self.per_items = 10 @property def start(self): val = (self.current_page - 1) * self.per_items return val @property def end(self): val = self.current_page * self.per_items return val# ############### 调用 ###############p = Pager(1)p.start # 就是起始值,即:mp.end # 就是结束值,即:n

从上述可见:

Python的property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回。

3. property属性的有两种方式 装饰器 即:在方法上应用装饰器 类属性 即:在类中定义值为property对象的类属性

3.1 装饰器方式

在类的实例方法上应用@property装饰器

Python中的类有经典类和新式类,新式类的属性比经典类的属性丰富。( 如果类继object,那么该类是新式类 )

经典类,具有一种@property装饰器:

# ############### 定义 ############### class Goods: @property def price(self): return "laowang"# ############### 调用 ###############obj = Goods()result = obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值print(result)

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

#coding=utf-8# ############### 定义 ###############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 方法

注意: 经典类中的属性只有一种访问方式,其对应被 @property 修饰的方法 新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法

由于新式类中具有三种访问方式,我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除

class Goods(object): def __init__(self): # 原价 self.original_price = 100 # 折扣 self.discount = 0.8 @property def price(self): # 实际价格 = 原价 * 折扣 new_price = self.original_price * self.discount return new_price @price.setter def price(self, value): self.original_price = value @price.deleter def price(self): del self.original_priceobj = Goods()obj.price # 获取商品价格obj.price = 200 # 修改商品原价del obj.price # 删除商品原价

3.2 类属性方式,创建值为property对象的类属性

当使用类属性的方式创建property属性时,经典类和新式类无区别

class Foo: def get_bar(self): return 'laowang' BAR = property(get_bar)obj = Foo()reuslt = obj.BAR # 自动调用get_bar方法,并获取方法的返回值print(reuslt)

property方法中有个四个参数 第一个参数是方法名,调用 对象.属性 时自动触发执行方法 第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法 第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法 第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息

#coding=utf-8class 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_barobj.BAR = "alex" # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入desc = Foo.BAR.__doc__ # 自动获取第四个参数中设置的值:description...print(desc)del obj.BAR # 自动调用第三个参数中定义的方法:del_bar方法

由于类属性方式创建property属性具有3种访问方式,我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除

class Goods(object): def __init__(self): # 原价 self.original_price = 100 # 折扣 self.discount = 0.8 def get_price(self): # 实际价格 = 原价 * 折扣 new_price = self.original_price * self.discount return new_price def set_price(self, value): self.original_price = value def del_price(self): del self.original_price PRICE = property(get_price, set_price, del_price, '价格属性描述...')obj = Goods()obj.PRICE # 获取商品价格obj.PRICE = 200 # 修改商品原价del obj.PRICE # 删除商品原价

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

4. property属性-应用

4.1. 私有属性添加getter和setter方法

class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__money def setMoney(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型数字")

4.2. 使用property升级getter和setter方法

class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__money def setMoney(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型数字") # 定义一个属性,当对这个money设置值时调用setMoney,当获取值时调用getMoney money = property(getMoney, setMoney) a = Money()a.money = 100 # 调用setMoney方法print(a.money) # 调用getMoney方法#100

4.3. 使用property取代getter和setter方法

重新实现一个属性的设置和读取方法,可做边界判定

class Money(object): def __init__(self): self.__money = 0 # 使用装饰器对money进行装饰,那么会自动添加一个叫money的属性,当调用获取money的值时,调用装饰的方法 @property def money(self): return self.__money # 使用装饰器对money进行装饰,当对money设置值时,调用装饰的方法 @money.setter def money(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型数字")a = Money()a.money = 100print(a.money)

可以转化为numpy中的array来相加减。两个列表直接相加就是把元素放在一起了。相减会报错。如下:tqq=[2,3,7,0,1,0]rqq=[1,2,3,4,5,6]b=tqq+rqqprint(b)[2,3,7,0,1,0,1,2,3,4,5,6]#这行是输出要想将对应位置元素相加/减,需要转化到array。如下:import numpy as nptqq=np.array([2,3,7,0,1,0])rqq=np.array([1,2,3,4,5,6])bb=tqq+rqqprint(list(bb))[3,5,10,4,6,6]相减也是可以的:import numpy as nptqq=np.array([2,3,7,0,1,0])rqq=np.array([1,2,3,4,5,6])bb=tqq-rqqprint(list(bb))[1,1,4,-4,-4,-6]内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • python @property使用方法解析
  • python3中property使用方法详解
  • python中property函数用法实例分析
  • python读取properties配置文件操作示例
  • python实现读取properties配置文件的方法
  • python @property的用法及含义全面解析
  • python解析json之valueerror: expecting property name enclosed in double quotes: line 1 column 2(char 1)
  • python @propert装饰器使用方法原理解析
  • 在pandas多重索引multiindex中选定指定索引的行方法
  • pygame编写音乐播放器的实现代码示例
  • python生成密码库功能示例
  • python字符串的一些操作方法总结
  • 把mysql表结构映射为python中的对象的教程
  • python实现网站表单提交和模板
  • python 安装setuptools和pip工具操作方法(必看)
  • 解决python3 urllib 链接中有中文的问题
  • 用python编写一个基于终端的实现翻译的脚本
  • django中使用group_by的方法
  • python类中两个列表实例如何相加或相减
  • python中如何判断一个对象是否一个类的实例
  • 实例方法和类方法的区别 python
  • python 类当函数如何实例化
  • python中实例属性和类属性之间的关系
  • 有哪些Python图像处理方面的文章或实例
  • 简明python一个实例不解?
  • python 类 方法 对象 实例
  • python类的实例化问题
  • python可以用类的实例作为List元素么
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页python @property使用方法解析python3中property使用方法详解python中property函数用法实例分析python读取properties配置文件操作示例python实现读取properties配置文件的方法python @property的用法及含义全面解析python解析json之valueerror: expecting property name enclosed in double quotes: line 1 column 2(char 1)python @propert装饰器使用方法原理解析pygame编写音乐播放器的实现代码示例python生成密码库功能示例python字符串的一些操作方法总结把mysql表结构映射为python中的对象的教程python实现网站表单提交和模板python 安装setuptools和pip工具操作方法(必看)解决python3 urllib 链接中有中文的问题用python编写一个基于终端的实现翻译的脚本django中使用group_by的方法python入门教程 超详细1小时学会python 列表(list)操作方法详解python 元组(tuple)操作详解python 字典(dictionary)操作详解pycharm 使用心得(一)安装和首python strip()函数 介绍python 中文乱码问题深入分析python中使用xlrd、xlwt操作excepython科学计算环境推荐——anacpython逐行读取文件内容的三种方python使用pyecharts库画地图数据可视化的基于python的xss测试工具xsstrike使用方法python七夕浪漫表白源码django框架创建项目的方法入门教程用python编写生成树状结构的文件目录的脚python做文本按行去重的实现方法python对excel按列值筛选并拆分表格到多个关于python的一些学习总结python使用pil生成图片验证码的方法python实现求数列和的方法示例
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved