IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 学习笔记7-python(构造函数、类属性、实例属性及析构函数 -> 正文阅读

[Python知识库]学习笔记7-python(构造函数、类属性、实例属性及析构函数

1.构造函数

先创建对象,然后使用直接赋值【动态绑定属性】方式给对象绑定属性,可以使用,但是代码比较繁杂,一般情况下,很多类倾向于将对象创建为有初始状态的,常规用法中,在类中可以定义一个函数,名称为__init__,该特殊的函数被称为构造函数,主要用于给对象的数据做出初始化

强调:构造函数包括__new__和__init__

注意:在Python中,以__xxx__方式命名的函数被称为魔术函数/魔术方法,这类函数在使用的时候无需手动调用,在进行某个操作的时候会自动调用

构造函数,也被称为构造器,指的是当创建对象的时候,被自动调用的函数

语法:
def __new__(cls,*args,**kwrags):
	pass
def __init__(self):
 pass

1.1工作原理

# 【面试题】构造函数的工作原理
class Animal():
 __slots__ = ('name','age')
 def __new__(cls, *args, **kwargs):
     print("new~~~~~~~")
     # super().__new__(cls)表示创建对象
     return super().__new__(cls)
 def __init__(self,name,age):
     print("init~~~",id(self))
     self.name = name
     self.age = age

a = Animal("大黄",4)
print(a)   # <__main__.Animal object at 0x1043e6cd0>
print(id(a))

"""
总结:
 a.真正意义上,构造函数包含__new__和__init__
 b.在实际开发中,常用__init__,因为__new__在类中没有定义,当创建对象的时候仍然会自动调用
 c.__new__:表示创建对象,该函数的返回值就是创建出来的对象
     例如:a = Animal("大黄",4),a指向__new__的返回值
   __init__:表示初始化对象,系统会自动将__new__的返回值【创建的对象】会自动传参给__init__中的self,
            同时,将需要初始化的值传参给__init__中的其他参数,完成对象初始化的过程
 d.构造函数中,当创建对象的时候,都是先调用__new__,然后才调用__init__
"""

1.2类属性和实例属性

【面试题】简述类属性【类的字段】和实例属性【对象属性,对象的字段】的区别
1.定义位置不同:类属性直接定义在类中,实例属性定义在__init__中或在类的外面直接动态绑定定义
2.访问方式不同:类属性可以通过类名或对象访问,而实例属性只能通过对象访问
3.访问优先级不同:当类属性和实例属性重名时,通过对象访问,优先访问的是实例属性
4.在内存中出现的时机不同:类属性优先于实例属性出现在内存中,类属性随着类的加载而出现,实例属性是对象创建完毕之后才会出现
5.使用场景不同:类属性用于表示多个对象共享的数据,实例属性表示每个对象特有的数据

2.析构函数

"""
【面试题】析构函数__del__调用的时机
当对象被销毁的时候

"""
class Person():
 def __init__(self):
     print("构造函数被调用了")
 def __del__(self):
     print("析构函数被调用了~~~~~")

# 1.当对象被定义为全局变量,当程序结束之后,__del__会被自动调用
# print("start")
# p1 = Person()
# print("over")
"""
start
构造函数被调用了
over
析构函数被调用了~~~~~
"""

# 2.当对象被定义为局部变量,当函数调用完毕,__del__会被自动调用
# def func():
#     p1 = Person()
# print("start")
# func()
# print("over")
"""
start
构造函数被调用了
析构函数被调用了~~~~~
over
"""

# 3.当对象被del删除,则__del__会被自动调用
print("start")
p1 = Person()

del p1
print("over")
"""
start
构造函数被调用了
析构函数被调用了~~~~~
over
"""
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-20 22:59:42  更:2022-06-20 23:00:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 16:24:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码