Python的进阶之道【AIoT阶段一(上)】(十五万字博文 保姆级讲解)—玩转Python语法(二):面向对象—不会吧不会吧,你居然还没有对象(3)(七)

简介: 玩转Python语法(二):面向对象

4.9 __new__与__init__演示创建对象的过程

🚩这里直接上代码,根据运行结果进行讲解:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 12:56
# 欢迎大家关注AIoT相关博客~
class Person(object):
    def __new__(cls, *args, **kwargs):
        print('__new__被调用执行了,cls的id值为{0}'.format(id(cls)))
        obj=super().__new__(cls)
        print('创建的对象的id为:{0}'.format(id(obj)))
        return obj
    def __init__(self, name, age):
        print('__init__被调用了,self的id值为:{0}'.format(id(self)))
        self.name = name
        self.age = age
print('object这个类对象的id为:{0}'.format(id(object)))
print('Person这个类对象的id为:{0}'.format(id(Person)))
#创建Person类的实例对象
p1 = Person('辰chen', 19)
print('p1这个Person类的实例对象的id:{0}'.format(id(p1))

image.png

我们看到程序先执行的是第 18 行,输出了 object 的地址(我们地址用后四位进行简写):9312;然后输出了 Person 的地址:8560,然后执行第 21 行的 Person('辰chen', 19),创建一个实例化对象,然后程序来到了 7 行的 __new__(),这实际上就是把 Person 传给了 cls,故第 8 行输出 cls 的地址为:8560,紧接着第 9 行继续把 Person 传入,调用父类方法创建实例化对象 obj,然后输出 obj 的地址:0992,接着有 return 语句,return 实际是返回给了 13 行的 __init__()中的 self,故执行第 14 行代码,输出的 self 地址:0992,在经过了这些,实例化对象创建完成并赋值成功,最后再返回到 22 行,把创建好的对象赋值给 p1,故输出 p1 的地址为:0992.


*4.10 类的赋值与浅拷贝

注:本小节带 *,不需要进行学习,可以简单进行了解

⛲️ 变量的赋值操作:只是形成两个变量,实际上还是指向同一个对象

浅拷贝:Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象


这里直接上代码,根据代码结果画出流程图去辅助理解:

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 13:35
# 欢迎大家关注AIoT相关博客~
class CPU:
    pass
class Disk:
    pass
class Computer:
    def __init__(self,cpu,disk):
        self.cpu = cpu
        self.disk = disk
#(1)变量的赋值
cpu1 = CPU()
cpu2 = cpu1
print(cpu1, id(cpu1))
print(cpu2, id(cpu2))
print('------------------------------')
#(2)类有浅拷贝
disk = Disk()  #创建一个硬盘类的对象
computer = Computer(cpu1, disk)  #创建一个计算机类的对象
#浅拷贝
import copy
print(disk)
computer1 = copy.copy(computer)
print(computer, computer.cpu, computer.disk)
print(computer1, computer1.cpu, computer1.disk)

image.png

类对象的赋值操作内存图解:

9.png

浅拷贝内存图解:10.png

从这个图中其实很好理解浅拷贝,就是我们拷贝后,只拷贝了Computer实例化对象,并没有把CPU实例化对象和Disk实例化对象也拷贝一份,这样的拷贝模式就被称为浅拷贝。


*4.11 深拷贝

注:本小节带 *,不需要进行学习,可以简单进行了解

⛲️ 深拷贝:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同。

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 13:35
# 欢迎大家关注AIoT相关博客~
class CPU:
    pass
class Disk:
    pass
class Computer:
    def __init__(self,cpu,disk):
        self.cpu = cpu
        self.disk = disk
#(1)变量的赋值
cpu1 = CPU()
cpu2 = cpu1
print(cpu1, id(cpu1))
print(cpu2, id(cpu2))
print('------------------------------')
#(2)类有浅拷贝
disk = Disk()  #创建一个硬盘类的对象
computer = Computer(cpu1, disk)  #创建一个计算机类的对象
#浅拷贝
import copy
print(disk)
computer1 = copy.copy(computer)
print(computer, computer.cpu, computer.disk)
print(computer1, computer1.cpu, computer1.disk)
print('------------------------------')
#深拷贝
computer2 = copy.deepcopy(computer)
print(computer, computer.cpu, computer.disk)
print(computer2, computer2.cpu, computer2.disk)

image.png

深拷贝内存图解:12.png



目录
相关文章
|
18天前
|
人工智能 Ubuntu IDE
【Python】基础:环境配置与基础语法
本文介绍了Python编程语言及其环境配置方法。Python由Guido van Rossum于1991年创建,以其简洁、易学和强大的功能著称。文章详细讲解了Python的主要特点、Windows和Ubuntu下的安装配置步骤、基础语法、控制流、函数、文件操作、模块使用及面向对象编程等内容,帮助读者快速入门Python编程。
48 4
|
1月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
62 2
|
19天前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
19天前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
8天前
|
存储 Python Perl
python正则语法
本文介绍了正则表达式的基础知识及其在 Python 中的应用。首先解释了为什么要使用正则表达式,通过一个判断手机号的示例展示了正则表达式的简洁性。接着详细介绍了 `re` 模块的常用方法,如 `match()`、`search()`、`findall()`、`finditer()` 等,并讲解了正则表达式的基本语法,包括匹配单个字符、数字、锚字符和限定符等。最后,文章还探讨了正则表达式的高级特性,如分组、编译和贪婪与非贪婪模式。
11 2
|
14天前
|
存储 程序员 开发者
Python编程入门:从零开始掌握基础语法
【10月更文挑战第21天】本文将带你走进Python的世界,通过浅显易懂的语言和实例,让你快速了解并掌握Python的基础语法。无论你是编程新手还是想学习一门新的编程语言,这篇文章都将是你的不二之选。我们将一起探索变量、数据类型、运算符、控制结构、函数等基本概念,并通过实际代码示例加深理解。准备好了吗?让我们开始吧!
|
1月前
|
Python
深入解析 Python 中的对象创建与初始化:__new__ 与 __init__ 方法
深入解析 Python 中的对象创建与初始化:__new__ 与 __init__ 方法
17 1
|
1月前
|
Python
Python编程-关于面向对象的一些
Python编程-关于面向对象的一些
|
10天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
3天前
|
存储 人工智能 数据挖掘
从零起步,揭秘Python编程如何带你从新手村迈向高手殿堂
【10月更文挑战第32天】Python,诞生于1991年的高级编程语言,以其简洁明了的语法成为众多程序员的入门首选。从基础的变量类型、控制流到列表、字典等数据结构,再到函数定义与调用及面向对象编程,Python提供了丰富的功能和强大的库支持,适用于Web开发、数据分析、人工智能等多个领域。学习Python不仅是掌握一门语言,更是加入一个充满活力的技术社区,开启探索未知世界的旅程。
12 5

热门文章

最新文章