Python之特殊属性、对象的浅拷贝和深拷贝

news2024/11/15 4:58:05

一、特殊属性

Python对象中包含了很多双下划线开始和结束的属性,这些是特殊属性,有特殊用法。这里我们列出常见的特殊属性:

特殊属性含义
obj.__dict__对象的属性字典
obj.__class__对象所属的类
class.__bases__表示类的父类(多继承时,多个父类放到一个元组中)
class.__base__类的父类
class.__mro__类层次结构
class.__subclasses__()子类列表
#测试特殊属性
class A:
  pass
​
class B:
  pass
​
class C(B,A):
​
  def __init__(self,nn):
    self.nn = nn
​
  def cc(self):
    print("cc")
​
c = C(3)
​
print(c.__dict__)
print(c.__class__)
print(C.__bases__)
print(C.mro())
print(A.__subclasses__())

 运行结果:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'cc', 'nn']
{'nn': 3}
<class '__main__.C'>
(<class '__main__.B'>, <class '__main__.A'>)
[<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
[<class '__main__.C'>]

二、对象的浅拷贝和深拷贝

image-20211116115627056

2.1、浅拷贝

Python拷贝一般都是浅拷贝。

浅拷贝:拷贝时,拷贝源对象,但对象包含的子对象内容不拷贝。

2.2、深拷贝

使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象。

深拷贝:拷贝时,拷贝源对象,也递归拷贝对象中包含的子对象

#测试对象的引用赋值、浅拷贝、深拷贝
import copy
​
class MobilePhone:
  def __init__(self,cpu):
    self.cpu = cpu
​
class CPU:
  pass
​
c = CPU()
m = MobilePhone(c)
​
print("----浅拷贝-------")
m2 = copy.copy(m)  #m2是新拷贝的另一个手机对象
print("m:",id(m))
print("m2:",id(m2))
print("m的cpu:",id(m.cpu))
print("m2的cpu:",id(m2.cpu))  #m2和m拥有了一样的cpu对象
print("----深拷贝--------")
m3 = copy.deepcopy(m)
print("m:",id(m))
print("m3:",id(m3))
print("m的cpu:",id(m.cpu))
print("m3的cpu:",id(m3.cpu))  #m3和m拥有不一样的cpu对象

运算结果:

----浅拷贝-------
m: 1879267229360
m2: 1879267228592
m的cpu: 1879267229648
m2的cpu: 1879267229648
----深拷贝--------
m: 1879267229360
m3: 1879267222256
m的cpu: 1879267229648
m3的cpu: 1879267221968

三、组合

image-20211023171606894

结婚就是组合。两人组合后,可以复用对方的属性和方法!

除了继承,“组合”也能实现代码的复用!“组合”核心是“将父类对象作为子类的属性”。

  1. is-a关系,我们可以使用“继承”。从而实现子类拥有的父类的方法和属性。is-a关系指的是类似这样的关系:狗是动物,dog is animal。狗类就应该继承动物类。
  2. has-a关系,我们可以使用“组合”,也能实现一个类拥有另一个类的方法和属性。has-a关系指的是这样的关系:手机拥有CPU。 MobilePhone has a CPU
#组合测试
​
class MobilePhone:
  def __init__(self,cpu,screen):
    self.cpu = cpu
    self.screen = screen
​
​
class CPU:
​
  def calculate(self):
    print("计算,算个12345")
​
​
class Screen:
  def show(self):
    print("显示一个好看的画面,亮瞎你的钛合金大眼")
​
​
c = CPU()
s = Screen()
m = MobilePhone(c,s)
m.cpu.calculate()    #通过组合,我们也能调用cpu对象的方法。相当于手机对象间接拥有了“cpu的方法”
m.screen.show()

运算结果:

计算,算个12345
显示一个好看的画面,亮瞎你的钛合金大眼

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/854458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

solidworks(2)

记得选择双向

【100天精通python】Day26:文件和IO操作_文件指针的定位与移动,序列化与反序列化

目录 专栏导读 1 文件的基本操作 1.1 参考 1.2 获取文件属性&#xff1a; 2 定位和移动文件指针 3 序列化和反序列化 3.1 序列化与反序列化概述 3.2JSON序列化与反序列化 JSON序列化&#xff1a; JSON反序列化&#xff1a; 3.3 pickle 序列化与反序列化 pickle 序列…

CTF REVERSE练习之病毒分析

首先介绍两个知识点&#xff0c;在后面的实验中运用到的。 1、7Zip 7-Zip 是一款开源软件。我们可以在任何一台计算机上使用 7-Zip &#xff0c;包括用在商业用途的计算机。7-Zip 适用于 Windows 7 / Vista / XP / 2008 / 2003 / 2000 / NT / ME / 98。并且有面向 Mac OS X、…

开发中常用的数据库日志都长啥样呢?

目录 常见日志级别 数据库日志 Undo log 逻辑日志 redolog binlog 慢查询日志 AOF 文本文件 RDB 二进制文件 常见日志级别 DEBUG&#xff1a;用于详细记录应用程序的运行过程&#xff0c;如变量值、执行流程等。DEBUG级别的日志通常用于开发和调试过程中&#xff0c;以…

不看后悔一辈子!不看错过50K!历尽心血总结Redis全局命令

前言&#xff1a; &#x1f4d5;作者简介&#xff1a;热爱编程的敖云岚&#xff0c;致力于C、Java、Python等多编程语言&#xff0c;热爱编程和长板的运动少年&#xff01; &#x1f4d8;相关专栏&#xff1a;Java基础语法&#xff0c;JavaEE初阶&#xff0c;数据库&#xff0c…

【Python】单元测试框架unitest及其高级应用

目录 Unittest 简单使用示例 重要概念 断言方法 深入 高级应用 认识Page Object 资料获取方法 Unittest Unittest是python的一个单元测试框架&#xff0c;但是它不仅适用于单元测试&#xff0c;还适用自动化测试用例的开发与执行。我们可以很方便的使用它组织执行测试用…

JVM垃圾回收篇-垃圾回收算法

JVM垃圾回收篇-垃圾回收算法 标记清除&#xff08;Mark Sweep&#xff09; 概念 collector指的就是垃圾收集器。 mutator是指除了垃圾收集器之外的部分&#xff0c;比如说我们的应用程序本身。 mutator的职责一般是NEW(分配内存)、READ(从内存中读取内容)、WRITE(将内容写入内…

CSMA/CD协议原理

共享总线以太网具有天然的广播特性&#xff0c;即使总线上某个站点给另一个站点发送单播帧&#xff0c;表示帧的信号也会沿着总线传播到总线上的其他各站点 。 当某个站点在总线上发送顿时&#xff0c;此时&#xff0c;如果总线上的其他站点也要在总线当某个站点在总线上发送顿…

Qt应用开发(基础篇)——时间微调输入框 QDateTimeEdit、QDateEdit、QTimeEdit

一、前言 QAbstractSpinBox是全部微调输入框的父类&#xff0c;这是一种允许用户通过点击上下箭头按钮或输入数字来调整数值的图形用户界面控件&#xff0c;父类提供了当前值text、对齐方式align、只读readOnly等通用属性和方法。在上一篇数值微调输入框中有详细介绍。 QDateTi…

资深java程序员的IDEA的常用设置

设置入口 打开项目以后也可以在左上角File-->setting进行设置&#xff0c;不过部分设置的是该项目的&#xff0c;换个项目可能就变了&#xff0c;建议打开项目之前就设置。 一般新的idea软件默认是下图页面&#xff0c;或者打开项目后可以点击File-->Close Project退到…

【CI/CD】Git Flow 分支模型

Git Flow 分支模型 1.前言 Git Flow 模型&#xff08;本文所阐述的分支模型&#xff09;构思于 2010 年&#xff0c;也就是 Git 诞生后不久&#xff0c;距今已有 10 多年。在这 10 多年中&#xff0c;Git Flow 在许多软件团队中大受欢迎。 在这 10 多年里&#xff0c;Git 本身…

C++异常使用

异常关键字&#xff1a; try&#xff1a;在try部可检测异常 catch&#xff1a;当发现异常捕获处 throw&#xff1a;抛出异常处 noexcept&#xff1a;被修饰函数内部不会发生异常 允许抛出和捕捉各种类型的数据。 int main() {try{func();}catch(const char*e){ //捕捉字符…

计算机是怎么存储和识别人类高级语言的

目录 1、计算机是怎么“存储”人类的高级语言的&#xff1f;2、 UTF-8和UTF-32的区别3、UTF-8是如何区分字节的长度呢&#xff1f;&#xff08;即如何识别这一串二进制是多少个字节的&#xff1f;&#xff09;4、计算机是如何识别人类的高级语言的&#xff1f; 1、计算机是怎么…

idea如何开启多个客户端(一个代码开启多个客户端运行)

1.在编程界面UdpEchoClient的下拉列表中找到Edit Configurations...并点击 2.点击Modify options 3.点击Allow multiple instances将其勾选上 4.点击ok 在经历了以上的设置以后&#xff0c;再次运行客户端的程序便会创建一个新的客户端运行&#xff08;有了一个新的运行窗口&am…

【AI】《动手学-深度学习-PyTorch版》笔记(十四):多层感知机

AI学习目录汇总 1、多层感知机网络结构 1.1 线性模型:softmax回归 在前面介绍过,使用softmax回归来处理分类问题时,每个输出通过都一个仿射函数计算,网络结构如下,输入和输出之间为全链接层: 1.2 多层感知机 多层感知机就是在输入和输出中间再添加一个或多个全链接…

解数独(Java)

题目链接&#xff1a; 力扣 题目详情&#xff1a; 37. 解数独t编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只…

研发工程师玩转Kubernetes——使用emptyDir在同一Pod不同容器间共享数据

kubernets可以通过emptyDir实现在同一Pod的不同容器间共享文件系统。 正如它的名字&#xff0c;当Pod被创建时&#xff0c;emptyDir卷会被创建&#xff0c;这个时候它是一个空的文件夹&#xff1b;当Pod被删除时&#xff0c;emptyDir卷也会被永久删除。 同一Pod上不同容器之间…

【数据分析】pandas (三)

基本功能 在这里&#xff0c;我们将讨论pandas数据结构中常见的许多基本功能 让我们创建一些示例对象&#xff1a; index pd.date_range(“1/1/2000”, periods8) s pd.Series(np.random.randn(5), index[“a”, “b”, “c”, “d”, “e”]). df pd.DataFrame(np.random.…

BDA初级分析——界定问题

数据分析&#xff0c;从界定问题开始 一、界定问题的作用 如何从现有台式机企业客户中挑选出那些想购买服务器的企业客户&#xff1f; 问题中的陷阱&#xff0c;隐藏的假设条件 假设1: 在购买服务器的客户中&#xff0c;只有0.01%的客户是购买过公司台式机的客户&#xff0…