python的@property有什么用?

2023-11-04

从本质上讲,@property是一个语法糖。语法糖是python里老生常谈的事务了,比方说,最基础的len(iterable)函数,其实是通过调用iterable.__len__()方法实现的。只是pythonic的理念让我们习惯并且喜欢上使用诸如func()的方法。而@property也是一个语法糖。本文旨在简要介绍这一类语法糖。

其实,各个python教程里都会说明,@符号在python中常用的部分是装饰器。有关装饰器的详细介绍参考如下链接

Python 函数装饰器 | 菜鸟教程 (runoob.com)

@property有什么用呢?表面看来,就是将一个方法用属性的方式来访问.

为介绍@property,我们先初始化如下简要代码:

# @property有什么用呢?表面看来,就是将一个方法用属性的方式来访问.

class Circle:
    def __init__(self, radius):
        self.radius = radius

    @property
    def area(self):
        return 3.1416 * self.radius ** 2


c = Circle(4)  # 初始化一个Circle类的实例
print(c.radius)
print(c.area)

本例中,Circle是一个类,而radius显然是一个基于__init__函数定义的属性,同时,area虽然是一个函数,但是由于申明了@property这句话,这使得Ciucle().area成为该类(实例)的属性。事实上,对于Circle类,由于未实例化,Circle.radius是没有意义的,但是Circle.area是有意义的,这是由于__init__里的部分是只有实例化才可以正常享用的,而Circle.area本质上是一个函数,只是python通过其内置的方法,约定俗成将其称为<property at 0x2bdeddd2040>,(里面的内存地址为实测的结果)。

综上所述,area虽然是定义成一个方法的形式,但是加上@property后,可以直接c.area,当成属性访问。事实上,@property的真实调用是在property函数中将其下一行def的函数作为输入变量,为下一行的函数增加功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python的@property有什么用? 的相关文章

  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 打印 scrapy 请求的“响应”

    我正在尝试学习 scrapy 在遵循教程的同时 我正在尝试进行细微的调整 我想简单地从请求中获取响应内容 然后我会将响应传递到教程代码中 但我无法发出请求并获取响应内容 建议就好 from scrapy http import Respon
  • 为什么我不能导入 geopandas?

    我唯一的代码行是 import geopandas 它给了我错误 OSError Could not find libspatialindex c library file 以前有人遇到过这个吗 我的脚本运行得很好 直到出现此错误 请注意
  • 如何使用pycaffe重构caffe网络

    我想要的是 加载网络后 我将分解一些特定的图层并保存新的网络 例如 原网 数据 gt conv1 gt conv2 gt fc1 gt fc2 gt softmax New net 数据 gt conv1 1 gt conv1 2 gt c
  • 使用 Django 的 post_save() 信号

    我有两张桌子 class Advertisement models Model created at models DateTimeField auto now add True author email models EmailField
  • 用 Python 编写一个无操作或虚拟类

    假设我有这样的代码 foo fooFactory create 由于种种原因 fooFactory create 可能无法创建实例Foo 如果可以的话我想要fooFactory create 返回一个虚拟 无操作对象 这个对象应该是完全惰性
  • 如何用 python 和 sympy 解决多元不等式?

    我对使用 python 和 Sympy 还很陌生 并且遇到了使用 sympy 解决多元不等式的问题 假设我的文件中有很多函数 如下所示 cst sqrt x 2 cst exp sqrt cst x 1 4 log log sqrt cst
  • 如何自动替换多个文件的文本内容中的字符?

    我有一个文件夹 myfolder包含许多乳胶表 我需要替换其中每个字符 即替换任何minus sign by an en dash 只是为了确定 我们正在替换连字符INSIDE该文件夹中的所有 tex 文件 我不关心 tex 文件名 手动执
  • 在 Python 中使用 sec 函数的反函数

    我正在创建一个程序 用于计算从一定高度范围和设定初始速度发射射弹的最佳角度 在我需要使用的最终方程中 存在一个反 sec 函数 它导致了一些麻烦 我已经导入了数学并尝试使用 asec 无论如何 但是数学似乎无法计算反秒函数 我也明白 sec
  • 将一个时间序列插入到 pandas 中的另一个时间序列中

    我有一组定期测量的值 说 import pandas as pd import numpy as np rng pd date range 2013 01 01 periods 12 freq H data pd Series np ran
  • python ttk treeview:如何选择并设置焦点在一行上?

    我有一个 ttk Treeview 小部件 其中包含一些数据行 如何设置焦点并选择 突出显示 指定项目 tree focus set 什么也没做 tree selection set 0 抱怨 尽管小部件明显填充了超过零个项目 但未找到项目
  • 将 subprocess.Popen 的输出通过管道传输到文件

    我需要启动一些长时间运行的进程subprocess Popen 并希望拥有stdout and stderr从每个自动管道到单独的日志文件 每个进程将同时运行几分钟 我想要两个日志文件 stdout and stderr 每个进程当进程运行
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • 在 Mac 上安装 Pygame 到 Enthought 构建中

    关于在 Mac 上安装 Pygame 有许多未解答的问题 但我将在这里提出我的具体问题并希望得到答案 我在 Mac 上安装 Pygame 时遇到了难以置信的困难 我使用 Enthought 版本 EPD 7 3 2 32 位 它是我的默认框
  • 使用 python 将文本发送到带有逗号分隔符的列

    如何使用分隔符 在 Excel 中将一列分成两列 并使用 python 命名标题 这是我的代码 import openpyxl w openpyxl load workbook DDdata xlsx active w active a a
  • python中的sys.stdin.fileno()是什么

    如果这是非常基本的或之前已经问过的 我很抱歉 我用谷歌搜索但找不到简单且令人满意的解释 我想知道什么sys stdin fileno is 我在代码中看到了它 但不明白它的作用 这是实际的代码块 fileno sys stdin filen
  • asyncio - 多次等待协程(周期性任务)

    我正在尝试为异步事件循环创建定期任务 如下所示 但是我收到 RuntimeError 无法重用已等待的协程 异常 显然 asyncio 不允许等待相同的可等待函数 如中讨论的这个错误线程 https bugs python org issu
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 如何识别图形线条

    我有以下格式的路径的 x y 数据 示例仅用于说明 seq p1 p2 0 20 2 3 1 20 2 4 2 20 4 4 3 22 5 5 4 22 5 6 5 23 6 2 6 23 6 3 7 23 6 4 每条路径都有多个点 它们

随机推荐

  • 搭建游戏环境

    搭建游戏环境 安装docker curl fsSL https get docker com bash s docker mirror Aliyun 安装docker compose curl L https github com dock
  • 标准模板库(STL)

    STL 标准模板库 Standard Template Library STL 是一个基于模板的容器类库 可用STL创建一个类 为任意数据类型定义矢量 链表 队列和栈等操作 STL中的泛型算法 generic algorithm 和函数对象
  • Python——— 面向对象

    一 初识面向对象 Python完全采用了面向对象的思想 是真正面向对象的编程语言 完全支持面向对象的基本功能 例如 继承 多态 封装等 Python 支持面向过程 面向对象 函数式编程等多种编程范 式 Python 中 一切皆对象 我们在前
  • 使用pickle模块序列化数据,优化代码

    使用pickle模块序列化数据 优化代码 pickle是Python标准库中的一个二进制序列化和反序列化库 可以以二进制的形式将数据持久化保存到磁盘文件中 可以将数据和代码分离 提高代码可读性和优雅度 一 pickle模块介绍 pickle
  • lstm神经网络_机器翻译与高级循环神经网络LSTM,GRU

    No 1 机器翻译概述 机器翻译就是将一种语言翻译为另一种语言 所有机器翻译系统本质上都是基于统计的 我们将总尝试使用非常大的语料库 一般称为平行语料库 在语料库中 有许多句子或段落以不同语言表述 No 2 深度学习出现之前的机器翻译模型
  • linux内核之双向链表实现原理

    1 内核中双向链表结构 Linux内核中广泛使用了一种称为循环双链 Circular Doubly Linked 链表的数据结构 即每个节点都有一个向前和向后的链接 而且首尾节点也相互连接 使用这样的链表 你可以很方便地访问任何一个元素的上
  • Android调用手机系统自带录音功能实现语音录制与播放

    首先调用手机系统自带的录音功能需要相关权限以及读写SD卡的权限
  • linux下C程序查看内存剩余大小

    嵌入式linux中很多内存资源都比较小 所以很多程序中在malloc时就需要提前知道内存剩余的大小 下面是一种调用 sysinfo接口来实现 示例代码如下 include
  • java--基础--16.8--IO流--打印流

    java 基础 16 8 IO流 打印流 1 介绍 1 1 分类 字节流打印流 PrintStream 字符打印流 PrintWriter 1 2 特点 只有写数据的 没有读取数据 只能操作目的地 不能操作数据源 可以操作任意类型的数据 如
  • 东北大学acm训练第四周(搜索)

    include
  • 在mac上配置vue开发环境

    1 在mac上安装brew brew 是 Mac 下的一个包管理工具 没有安装brew 检测用 brew v 则执行下面的命令安装 usr bin ruby e curl fsSL https raw githubusercontent c
  • sqli-18

    1 1 updatexml 1 concat 0x5c select group concat table name from information schema tables where table schema security
  • springMvc自定义校验注解

    spring 自定义注解 翻看公司代码 看到了自定义的注解 查了查 再次记录一下 还是太菜 下面是我的实现 1 自定义注解 package com test import javax validation Constraint import
  • 多核编程 与 单核多线程编程的区别

    一 首先声明 并行 两件 多件 事情在同一时刻一起发生 并发 两件 多件 事情在同一时刻只能有一个发生 由CPU快速切换 从而给人的感觉是同时进行 使用多线程来实现并行计算来缩短计算时间时 只要在多核CPU下才行 单核CPU下启用多线程最终
  • mac安装php8和apache

    如果自己在mac安装php 会涉及证书问题 而用brew方法安装 即可自动关联 省心省力 删除mac自带的apache sudo launchctl unload w System Library LaunchDaemons org apa
  • spring 或者spring boot 调整bean 的加载顺序:

    spring 或者spring boot 调整bean 的加载顺序 接下来讲解三种调整类加载顺序的方式 1 使用 Order调整配置类加载顺序 Configuration Order 1 public class ConfigA Bean
  • web安全之XSS攻击原理及防范

    一 什么是XSS攻击 二 反射型XSS 三 存储型XSS 四 DOM based型XSS 五 SQL注入 六 XSS如何防范 1 cookie安全策略 2 X XSS Protection设置 3 XSS防御HTML编码 4 XSS 防御H
  • JSON简单例子-1

    package com xuankai json import org json JSONArray import org json JSONObject public class Test public static void main
  • Java 中Map五种取值方式

    map的主要作用是什么 可以通过创建一个map的实现类 来存放 数据 值 和值的描述 也可以通过描述去取得数据 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 此接口取代 Dictionary 类 后者完全是一个抽
  • python的@property有什么用?

    从本质上讲 property是一个语法糖 语法糖是python里老生常谈的事务了 比方说 最基础的len iterable 函数 其实是通过调用iterable len 方法实现的 只是pythonic的理念让我们习惯并且喜欢上使用诸如fu