热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python特性是什么意思_python之中特性(attribute)与属性(property)有什么区别?...

属性(property)是一种特殊的特性(attribute)。如下,我们定义了一个圆圈类(c

属性(property)是一种特殊的特性(attribute)。

如下,我们定义了一个圆圈类(circle),圆圈嘛,自然就有直径(diameter)和半径(radius),我们可以设置他们为特性(attribute)。

class Circle(object):

def __init__(self, radius,diameter):

self.radius = radius

self.diameter = diameter

然后进行实例化,打印出特性(attribute)值,并更改示例的特性(attribute)值,再次打印它们的值

class Circle(object):

def __init__(self, radius,diameter):

self.radius = radius

self.diameter = diameter

# 实例化

my_circle = Circle(2,4)

print('radius is {}'.format(my_circle.radius))

print('diameter is {}'.format(my_circle.diameter))

# 将直径改为6

my_circle.radius = 6

print('radius is {}'.format(my_circle.radius))

print('diameter is {}'.format(my_circle.diameter))

运行结果如下

radius is 2

diameter is 4

radius is 6

diameter is 4

我们发现,半径(radius)为2的时候,直径(diameter)为4。但是我们把半径改为6的时候,按照常理直径应该为8,但此时直径仍为4。因此我们希望程序能够自动根据我们的半径值计算出对一个的直径,也能根据直径计算出对应的一个半径,这时候我们就需要@property了。

我们修改原来的代码如下:

class Circle(object):

def __init__(self, radius):

self.radius = radius

@property

def diameter(self):

return self.radius * 2

@diameter.setter

def diameter(self, new_diameter):

self.radius = new_diameter / 2

# 实例化对象

my_circle = Circle(2)

print('radius is {}'.format(my_circle.radius))

print('diameter is {}'.format(my_circle.diameter))

# 将半径改为6

my_circle.radius = 6

print('radius is {}'.format(my_circle.radius))

print('diameter is {}'.format(my_circle.diameter))

# 将直径改为6

my_circle.diameter = 6

print('radius is {}'.format(my_circle.radius))

print('diameter is {}'.format(my_circle.diameter))

此时结果如下

radius is 2

diameter is 4

radius is 6

diameter is 12

radius is 3.0

diameter is 6.0

从上可知,property其实就是一个带有函数功能的attribute,attribute的值是静态的,而property是一个动态的attribute,我们可以根据需要改变它的值。

而在本质上,property能够实现这个动态的改变值的功能,是由于它有__get__、__set__ 和 __delete__方法。我们上面给diameter增加了@property和@diameter.setter,就是给diameter这个特性(attribute)增加了__get__ 和 __set__方法,从而通过调用这两个方法去改变了原来静态的特性(attribute)值,使它成为了一个属性(property)。

所以说属性(property)是一种特殊的特性(attribute)。

我们现在一般常把attribute称作属性,那么对应的我们把property理解为属性函数,或许这样更能与它们的特性和功能对应了。

参考文档



推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 解决问题:1、批量读取点云las数据2、点云数据读与写出3、csf滤波分类参考:https:github.comsuyunzzzCSF论文题目ÿ ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 2022年Python面试题一.Python基础二.企业面试题结束语🥇🥇🥇✅作者简介:大家好我是编程IDὌ ... [详细]
author-avatar
林海书6758
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有