python_面向对象中的特殊成员

 一、几个常见的特殊成员

# 都只是语法,无特殊意义
class Foo(object):def __init__(self,a1,a2):self.a1 = a1self.a2 = a2def __call__(self,*args,**kwargs):print(11111,args,kwargs)return 123def __getitem__(self, item):print(item)return 8def __setitem__(self, key, value):print(key,value,111111111)def __delitem__(self, key):print(key)def __add__(self, other):return self.a1+ other.a2def __enter__(self):print('111')return 999def __exit__(self, exc_type, exc_val, exc_tb):print('222')# 1.类名() 自动执行 __init__
obj = Foo(1,2)
# 2.对象() 自动执行 __call__
res=obj(6,4,2,k1=456)
print(res)
print("#"*20)
# 3.对象[] 自动执行 __getitem__
ret= obj['yu']
print(ret)
print("#"*20)
# 4.对象['xx']=11 自动执行 __setitem__
obj['k1'] = 123
print("#"*20)
# 5.del 对象[xx] 自动执行 __delitem__
del obj['aaa']
print("#"*20)
# 6.对象+对象 自动执行 __add__
obj1 = Foo(1,2)
obj2 = Foo(88,99)
ret=obj2+obj1
print(ret)
print("#"*20)
# 7.with 对象 自动执行  __enter__ / __exit__
with obj as f:print(f)print('内部代码')

# 8.真正的构造方法
class Foo(object):def __init__(self, a1, a2): # 初始化方法"""为空对象进行数据初始化:param a1::param a2:"""print(1)self.a1 = a1self.a2 = a2def __new__(cls,*args,**kwargs): # 构造方法"""创建一个空对象:param args::param kwargs:"""print(2)v1=object.__new__(cls)  # Python内部创建一个当前类的象(初创时内部是空的.)print(v1)return v1obj = Foo(1,2)
print(obj)

 

二、特殊成员的补充

1、__str__

     __doc__

代码: 

class Foo(object):"""Foo类"""def __init__(self):passdef func(self):passdef __str__(self):  # __str__(self)return "F1"obj = Foo()
print(obj,type(obj))
print(obj.__doc__)      # __doc__

结果: 

 

 

2、__dict__

class Foo(object):def __init__(self,name,age):self.name = nameself.age = agedef func(self):passobj1 = Foo("lin",99)
obj2 = Foo("yang",89)
print(obj1.__dict__)    # {'name': 'lin', 'age': 99}
print(obj2.__dict__)    # {'name': 'yang', 'age': 89}

 

 

3、 __iter__

#l1是list类的一个对象,可迭代对象 l1 = [11,22,33,44]
l1 = [11,22,33,44]class Foo(object):def __init__(self,name,age):self.name = nameself.age = agedef func(self):passdef __iter__(self):# return iter([11,22,33,44])yield 11yield 22yield 33# obj1是Foo类的一个对象,不可迭代对象
# 如果想要把不可迭代対象 → 可迭代对象
# 1.在类中定义 __iter__ 方法
# 2.iter内部返回一个迭代器(生成器也是一种特殊迭代器)
obj1 = Foo("lin",99)
for item in obj1:print(item)

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【左程云算法全讲13】暴力递归

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考…

csapp attack lab phase4

csapp attack lab phase4 每个gadget由一系列指令字节组成,最后一个字节为0xc3,编码为ret指令。 举个例子: 48 89 c7 是指令 movq %rax, %rdi, 对应的地址是0x400f15 0x3 也就是0x400f18, 是开始的指令位置。 例如: ret编码为0…

YOLO目标检测——无人机检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:无人机识别数据集说明:无人机检测数据集,真实场景的高质量图片数据,数据场景丰富标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签…

MySQL数据库下载及安装教程(最最新版)

MySQL数据库下载及安装教程(最最新版) 一、下载mysql数据库二、安装Mysql三、验证是否安装成功(一)、命令提示符cmd窗口验证(二)、MySQL控制台验证 一、下载mysql数据库 进入MySQL官方网站(htt…

CCF CSP认证 历年题目自练Day47

题目 试题编号: 201712-3 试题名称: Crontab 时间限制: 10.0s 内存限制: 256.0MB 样例输入 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * Sat,Sun go_to_bed 15 12,18 * * * have_dinner 样例输出 201711170…

杭州信息安全

更轻量级的用户开销 (Lower online burden) 更灵活的通信模型 (Flexible metadata-private messaging) 一对一通信 >多对一、一对多通信 Group messaging Broadcast / anycast 元数据隐私保护技术在其他系统的推广

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之进程管理2》(4)

《Linux操作系统原理分析之进程管理2》》(4) 3 进程管理3.5 P、V操作3.5.1 信号量3.5.2 信号量的应用3.5.3 进程同步机制 3.6 进程通信3.6.1 消息通信3.6.2 信箱通信 3.7 死锁3.7.1 死锁的定义3.7.2 死锁产生的必要条件3.7.3 死锁的预防3.7.4 死锁的避免…

flink入门

1.安装flink,启动flink 文档地址:Apache Flink 1.3-SNAPSHOT 中文文档: Apache Flink 中文文档 代码:GitHub - apache/flink: Apache Flink 2. 打开端口 端口号, 启动jar ### 切换到flink 目录bin下 [rootlocalhost ~]# cd /…

Vue3 toRef函数和toRefs函数

当我们在setup 中的以读取对象属性单独交出去时,我们会发现这样会丢失响应式: setup() {let person reactive({name: "张三",age: 18,job: {type: "前端",salary:10}})return {name: person.name,age: person.age,type: person.jo…

2023最新最全【CUDA Toolkit 12.3】下载安装零基础教程【附安装包】

官网地址:这里 CUDA是英伟达公司开发的一种并行计算平台和编程模型。它利用GPU的强大计算能力,加速各种数学和科学计算、数据分析、机器学习、计算机视觉等任务。CUDA包括CUDA编程语言、CUDA运行时库、NVIDIA显卡等组件。 CUDA的编写方式分为两种&…

Python aiohttp 完全指南:快速入门

aiohttp 就是 Python 中一款优秀的异步 Web 框架,它能够帮助我们构建高效的异步 Web 应用和异步 HTTP 客户端。在本文中,我们将深入探讨 aiohttp 是什么以及如何使用它,通过简单易懂的案例带领你理解异步编程,以及如何处理异步请求…

OpenGL 的学习之路-4(变换)

三大变换:平移、缩放、旋转(通过这三种变换,可以将图像移动到任意位置) 其实,这背后对应的数学在 闫令琪 图形学课程 中有过一些了解,所以,理解起来也不觉得很困难。看程序吧。 1.画三角形&am…