偶然碰到一篇讲解 @property 比较清晰的文章

记录下来

日常复习

# @property
'''
@property是python的一种装饰器,是用来修饰方法的
作用:
我们可以使用@property装饰器来创建只读属性
@property装饰器会将方法转换为相同名称的只读属性,
可以与所定义的属性配合使用,这样可以防止属性被修改
'''
# 使用场景一:修饰方法,使方法可以像属性一样访问
class DataSet(object):

    @property
def methodWithProperty(self): # 含有@property
return 15 def methodWithoutProperty(self): # 不含@property
return 15 l = DataSet()
print(l.methodWithProperty) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。
print(l.methodWithoutProperty()) # 没有加@property , 必须使用正常的调用方法的形式,即在后面加()

加了@property 则调用该方法时,无需加(),否则会报错:

class DataSet(object):

    @property
def methodWithProperty(self): # 含有@property
return 15 l = DataSet()
print(l.methodWithProperty()) # 加了()之后会报错
'''
如果使用property进行修饰后,又在调用的时候,方法后面添加了(), 那么就会显示错误信息:TypeError: 'int' object is not callable,
也就是说添加@property 后,这个方法就变成了一个属性,
如果后面加入了(),那么就是当作函数来调用,而它却不是callable(可调用)的。
'''

不加@property,调用该方法时,应加上(),否则不会正常调用该方法,而是输出该方法存放的地址,代码如下:

class DataSet(object):

    def methodWithoutProperty(self):  # 不含@property
return 15 l = DataSet()
print(l.methodWithoutProperty) # 没有加@property , 必须使用正常的调用方法的形式,即在后面加()
'''
没有使用property修饰,它是一种方法,如果把括号去掉,不会报错输出的就会是方法存放的地址。 '''
 
# 使用场景二:与所定义的属性配合使用,这样可以防止属性被修改
# 由于python进行属性的定义时,没办法设置私有属性,因此要通过@property的方法来进行设置。这样可以隐藏属性名,让用户进行使用的时候无法随意修改。
 
class DataSet(object):

    def __init__(self):
self._images = 100
self._labels = 2 # 定义属性的名称 @property
def images(self): # 方法加入@property后,这个方法相当于一个属性,这个属性可以让用户进行使用,而且用户没办法随意修改
return self._images @property
def labels(self):
return self._labels l = DataSet()
# 用户进行属性调用的时候,直接调用images即可,而不用知道属性名_images,因此用户无法更改属性,从而保护了类的属性。
print(l.images) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()

python @property用法(转载)的更多相关文章

  1. python property用法

    参考 http://openhome.cc/Gossip/Python/Property.html http://pyiner.com/2014/03/09/Python-property.html ...

  2. Python中“*”和“**”的用法 || yield的用法 || ‘$in’和'$nin' || python @property的含义

    一.单星号 * 采用 * 可将列表或元祖中的元素直接取出,作为随机数的上下限: import random a = [1,4] print(random.randrange(*a)) 或者for循环输 ...

  3. python property

    python property 在2.6版本中,添加了一种新的类成员函数的访问方式--property. 原型 class property([fget[, fset[, fdel[, doc]]]] ...

  4. Python高级用法总结

    Python很棒,它有很多高级用法值得细细思索,学习使用.本文将根据日常使用,总结介绍Python的一组高级特性,包括:列表推导式.迭代器和生成器.装饰器. 列表推导(list comprehensi ...

  5. python enumerate用法总结【转】

    enumerate()说明 enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enum ...

  6. python property详解

    Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情.在这篇文章中,我们将看到如何能做以下几点: 将类方法转换为只读属性 重新实现一个属性的setter和getter ...

  7. python property装饰器

    直接上代码: #!/usr/bin/python #encoding=utf-8 """ @property 可以将python定义的函数“当做”属性访问,从而提供更加友 ...

  8. python argparse用法总结

    转:python argparse用法总结 1. argparse介绍 argparse是python的一个命令行解析包,非常适合用来编写可读性非常好的程序. 2. 基本用法 prog.py是我在li ...

  9. Python @property 详解

    本文讲解了 Python 的 property 特性,即一种符合 Python 哲学地设置 getter 和 setter 的方式. Python 有一个概念叫做 property,它能让你在 Pyt ...

随机推荐

  1. matplotlib画直线图的基本用法

    一  figure使用 1 import numpy as np 2 import matplotlib.pyplot as plt 3 4 # 从-3到中取50个数 5 x = np.linspac ...

  2. 连接opcserver时报错 connecting to OPC Server "****" CoCreateInstance 服务器运行失败

    在普通windows系统连接OPCServer可能会报这样的错,排查很长时间,OPCServer跟Client都运行正常,点号录入也正常. 最后发现,其实是OPCServer 与OPCClient 权 ...

  3. Java 将Word转为OFD

    通常在工作中比较常用到的Microsoft Word是属于国外的文档内容编辑软件,其编译技术均属国外.而OFD是一种我国的自主文档格式,在某些特定行业或企业的文档存储技术上是一种更为安全的选择.下面将 ...

  4. vscode高效管理不同项目文件

    vscode作为一个轻量级编辑器,深受大家喜爱,这其中当然也囊括了本人.我同时使用vscode写c++.java.python以及markdown文档,每次打开vscode都要切换到对应的文件夹,非常 ...

  5. python之异步编程

    一.异步编程概述 异步编程是一种并发编程的模式,其关注点是通过调度不同任务之间的执行和等待时间,通过减少处理器的闲置时间来达到减少整个程序的执行时间:异步编程跟同步编程模型最大的不同就是其任务的切换, ...

  6. Mybatis动态SQL语句使用

    在实际开发中,有时候查询条件可能是不确定的,查询条件可能有多条也可能没有,这时候就需要用到动态的sql语句拼接功能. 一.if.where.sql标签的使用 需求:在一些高级查询中,查询条件存在的个数 ...

  7. 预算(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 预算是件重要的事,不然银几一花没边了,那结果可是要牺牺的(以下省略具体描述9^323字) 在Project里做预算,步骤不 ...

  8. 巧用符号链接迁移 HDFS 数据,业务完全无感知!

    问题 JuiceFS 是一个基于对象存储的分布式文件系统,在之前跟对象存储比较的文章中已经介绍了 JuiceFS 能够保证数据的强一致性和极高的读写性能,因此完全可以用来替代 HDFS.但是数据平台整 ...

  9. UVA11951 Area 题解

    Content 小 S 想买下一块地.他所在的城市可以看成一个 \(n\times m\) 的网格,要购买所处在 \((i,j)\) 的网格需要缴税 \(c_{i,j}\) 元,如果一块地里面有多个网 ...

  10. Python 计算AWS4签名,Header鉴权与URL鉴权

    AWS4 版本签名计算参考 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # @Time: 2021/7/24 8:12 # @Author:zhangm ...