我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中类怎样引用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中类怎样引用

小编给大家分享一下Python中类怎样引用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    1、引用的概念

    引用 (Reference)是对象的指针

    引用是内存中真实对象的指针,表示为变量名或者内存地址
    每个对象存在至少一个引用,id()函数用于获得引用
    在传递参数和赋值时,Python传递对象的引用,而不是复制对象

    示例代码:

    list1 = [1, 2, 3, 4]list2 = list1print(id(list1))  # 2044656837192print(id(list2))  # 2044656837192# 因为list1是类的实例化,list2引用的是list1,两个都是引用的最基础的object类,所以两个的结果是一样的

    Python内部机制对引用的处理

    • 不可变对象:immutable解释器为相同值维护尽量少的内存区域

    • 可变对象:mutable解释器为每个对象维护不同内存区域

    示例代码:

    text1 = "一碗周"text2 = text1text3 = "一碗周"text4 = "一碗"text5 = "周"text6 = text4 + text5print(id(text1))  # 1616972638288print(id(text2))  # 1616972638288print(id(text3))  # 1616972638288print(id(text4))  # 1616973621272print(id(text5))  # 1616973578032print(id(text6))  # 1616974246288

    因为text1和2是引用的一个字符串,所以内存地址是一样的;因为Python解释器会大可能的节省内存空间,所以当不可变类型的值一样时,Python会将其自动的引用一个地址空间,来达到节省空间的目的,所以text1/2/3的地址空间是一致的;Python解释器并不会对计算出来的结果来进行地址空间的优化,就算两个的值是一样的,Python解释器也会为新计算出来的结果来开辟一个新的地址空间

    示例代码:

    list1 = []list2 = []list3 = []print(id(list1))  # 3204114440776print(id(list2))  # 3204114440840print(id(list3))  # 3204115873544

    每个可变对象都有自己独立的地址空间,并不复用地址空间

    导致引用被+1的情况一般都4种

    • 对象被创建

    • 对象被引用

    • 对象被作为函数或方法的参数

    • 对象被作为一个容器中的元素

    导致引用-1的情况一把也都4种

    • 对象被删除

    • 对象的名字呗赋予新的对象

    • 对象离开作用域

    • 对象所在容器被删除

    2、对象的拷贝

    拷贝是复制一个对象为新对象,内存空间有”变化“,拷贝分为浅拷贝和深拷贝

    • 浅拷贝:仅仅复制最顶层对象的拷贝方式,默认拷贝方式

    • 深拷贝:迭代复制所有对象的拷贝方式

    示例代码(浅拷贝1)

    list1 = ["甜甜", [1, 2, 3]]list2 = list1.copy()  # 使用copy方法复制list3 = list1[:]  # 使用切片复制list4 = list(list1)  # 使用生成列表方式复制for ch in [list1, list2, list3, list4]:    for i in ch:        print(i, id(i),  "\t", end="")  # 打印列表的没一项和id    print(ch, id(ch))  # 打印每个列表和id    '''---输出结果---一碗周 2905817180184   [1, 2, 3] 2905787490888   ['一碗周', [1, 2, 3]] 2905787490952一碗周 2905817180184   [1, 2, 3] 2905787490888   ['一碗周', [1, 2, 3]] 2905817092488一碗周 2905817180184   [1, 2, 3] 2905787490888   ['一碗周', [1, 2, 3]] 2905817137800一碗周 2905817180184   [1, 2, 3] 2905787490888   ['一碗周', [1, 2, 3]] 2905817771656'''

    浅拷贝只是拷贝的列表这一层的内存空间,里面的元素的内存空间不会被拷贝

    示例代码(浅拷贝2)

    list1 = ["一碗周", [1, 2, 3]]list2 = list1.copy()  # 使用copy方法复制list3 = list1[:]  # 使用切片复制list4 = list(list1)  # 使用生成列表方式复制list4[1].append(4)print(list1)print(list2)print(list3)print(list4)'''--输出结果--['一碗周', [1, 2, 3, 4]]['一碗周', [1, 2, 3, 4]]['一碗周', [1, 2, 3, 4]]['一碗周', [1, 2, 3, 4]]'''

    这里只对list4进行来数据的修改,但是所有的列表的内容都发生了;这是因为每个列表所引用的内容是一样的,所以修改了1个四个会发生改变

    深拷贝要采用copy库里面的deepcopy()方法,迭代拷贝对象内层的各层次对象,完全新开辟内存空间建立对象以及对象下层的各种对象元素,深拷贝仅仅针对可变类别,不可变类型不许创建新对象

    示例代码

    import copy  # 导入库list1 = ["一碗周", [1, 2, 3]]list2 = copy.deepcopy(list1)  # 使用copy库的deepcopy方法复制for ch in [list1, list2]:    for i in ch:        print(i, id(i),  "\t", end="")  # 打印列表的没一项和id    print(ch, id(ch))  # 打印每个列表和id'''---输出结果---一碗周 2190823984184   [1, 2, 3] 2190853845832   ['一碗周', [1, 2, 3]] 2190853766728一碗周 2190823984184   [1, 2, 3] 2190853961544   ['一碗周', [1, 2, 3]] 2190853961480'''

    因为“甜甜”字符串属于不可变类型,所以其地址空间不会发生改变,剩下的地址空间都发生了改变

    2.1 实例方法的引用

    实例方法也是一种引用,就是对象本身的引用,当方法被引用时,方法(即函数)将产生一个对象:方法对象

    2.2 类的特性装饰器

    @property装饰器可以把方法改变成对外可见的”属性“,在类内部表现为方法,在外边表现为属性

    示例代码

    class TestClass:    def __init__(self, name):        self.name = name    @property    # 将方法转换为属性    def age(self):        return self.__age    @age.setter  # 为属性进行赋值操作    def age(self, value):        if value < 0 or value > 110:            value = 19        self.__age = valuett = TestClass("一碗周")bb = TestClass("一碗粥")tt.age = 18bb.age = -19print(tt.age)  # 18print(bb.age)  # 19

    3、类的名称修饰

    名称修饰 (Name Mangling)是类中名称的转换约定,Python可以通过名称修饰来完成一些重要功能,在Python中采用下划线_来进行名称修饰,分为5种情况,

    • _name

    • name_

    • __name

    • __name__

    • _

    3.1 _单下划线开头的名称修饰

    • 单下划线开头属性或者方法为类内部使用的约定,是PEP8规定的一种约定

    • 只是约定,依然可以通过<对象名>.<属性名>方式访问

    • 在功能的上的不同是使用from XX import *时不会导入单下划线开头的属性或者方法

    示例代码

    class TestClass:    def __init__(self, name):        self._name = name  # 约定在内部使用tt = TestClass("一碗周")print(tt._name)  # 一碗周

    虽然约定在内部使用,但是依然可以被访问

    3.2 _单下划线结尾的名称修饰

    单下划线结尾的属性或者方法是避免与保留字或已有命名冲突,这也是PEP8规定的,这仅仅是一个约定,没有任何对应的功能

    3.3 __双下划线开头的名称修饰

    双下划线开头属性或者方法将被解释器修改名称,避免命名冲突,这不是一个约定,而是功能性的, _nama会被修改为_<类名>__name的形式,来实现私有属性、私有方法;这是一种类的名称修饰,间接的来当做私有属性或者私有方法

    3.4 __name__双下划线开头和结尾的名称修饰

    双下划线开头和结尾的属性或方法没有任何特殊功能,名字不能被修改,部分名称是保留属性或者保留方法

    3.5 单下划线

    单下划线仅仅是一个无关紧要的名字吗,没有特殊功能

    4、Python的最小空类

    作用:

    类是一个命名空间,最小空类可以当做命名空间使用

    • 最小空类可以辅助存储和使用

    • 动态增加属性是Python类的一个特点

    示例代码:

    class TestClass:    passa = TestClassa.text = "一碗周"print(a.text)  # 一碗周# 可以动态增加属性来达到存储信息的目的

    以上是“Python中类怎样引用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Python中类怎样引用

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Python中类怎样引用

    小编给大家分享一下Python中类怎样引用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、引用的概念引用 (Reference)是对象的指针引用是内存中真实对象
    2023-06-25

    python中怎么实现抽样分类方法

    这期内容当中小编将会给大家带来有关python中怎么实现抽样分类方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。11.1 算法抽查在实践之前你并不知道哪种算法对你的的数据效果最好。 你需要尝试用不同的算
    2023-06-19

    Python中怎么引用计数

    Python中怎么引用计数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。回顾内存地址Python中的任何变量都有对应的内存引用,也就是内存地址。如果不是容器类型,那么直接引
    2023-06-16

    vue中怎么引入scss样式

    本篇内容介绍了“vue中怎么引入scss样式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体步骤如下:1.首先,在vue-cli中创建一个
    2023-07-04

    怎样在SQLServer中创建索引

    在SQL Server中,可以使用CREATE INDEX语句来创建索引。以下是创建索引的一般步骤:确定要在哪个表上创建索引。确定要在哪些列上创建索引。确定索引的类型(如B树索引、哈希索引等)。使用CREATE INDEX语句创建索引
    怎样在SQLServer中创建索引
    2024-04-09

    c#类库怎么引用

    如何在 c# 中引用类库?直接引用:右键单击项目,选择“添加引用”,浏览到 dll 文件并选择;使用 nuget:在 nuget 包管理器窗口中搜索所需类库,选择并安装;使用 using 指令:引用类库后,使用 using 指令访问其类型和
    c#类库怎么引用
    2024-05-12

    MongoDB中的索引是怎样的

    本篇文章给大家分享的是有关MongoDB中的索引是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。索引就像图书的目录一样,可以让我们快速定位到需要的内容,关系型数据库中有索
    2023-06-19

    C#中的引用类型以及特殊引用类型详解

    本文详细讲解了C#中的引用类型以及特殊引用类型,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-13

    python怎么定义索引模块类

    这篇文章主要介绍了python怎么定义索引模块类,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专
    2023-06-14

    css类样式怎么用

    css 类样式允许您在 html 文档中轻松对多个元素应用相同的外观和行为,从而提高代码的可维护性和一致性。如何定义类样式:使用 .(句号)前缀语法,在 元素或外部样式表文件中定义类样式。例如:.heading { color: red;
    css类样式怎么用
    2024-05-21

    Python中Numpy库datetime类型的处理是怎样的

    本篇文章给大家分享的是有关Python中Numpy库datetime类型的处理是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。关于时间的处理,Python中自带的处理时间
    2023-06-02

    python中的索引怎么使用

    在Python中,可以使用索引来访问和操作列表、字符串和元组等序列类型的对象。索引是一个非负整数,表示序列中的位置。索引从0开始,表示第一个元素。负数索引从-1开始,表示倒数第一个元素。以下是使用索引的一些常见操作:1. 访问元素:可以使用
    2023-08-18

    如何在java中引用类

    这篇文章将为大家详细讲解有关如何在java中引用类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、类的主动引用,一定会发生类的初始化当虚拟机启动,先初始化main方法所在的类实例化一个类的
    2023-06-15

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录