python_面向对象中的特殊成员

news2024/9/22 7:39:48

 一、几个常见的特殊成员

# 都只是语法,无特殊意义
class Foo(object):
    def __init__(self,a1,a2):
        self.a1 = a1
        self.a2 = a2

    def __call__(self,*args,**kwargs):
        print(11111,args,kwargs)
        return 123

    def __getitem__(self, item):
        print(item)
        return 8

    def __setitem__(self, key, value):
        print(key,value,111111111)

    def __delitem__(self, key):
        print(key)

    def __add__(self, other):
        return self.a1+ other.a2

    def __enter__(self):
        print('111')
        return 999

    def __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 = a1
        self.a2 = a2
    def __new__(cls,*args,**kwargs): # 构造方法
        """
        创建一个空对象
        :param args:
        :param kwargs:
        """
        print(2)
        v1=object.__new__(cls)  # Python内部创建一个当前类的象(初创时内部是空的.)
        print(v1)
        return v1

obj = Foo(1,2)
print(obj)

 

二、特殊成员的补充

1、__str__

     __doc__

代码: 

class Foo(object):
    """
    Foo类
    """
    def __init__(self):
        pass
    def func(self):
        pass
    def __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 = name
        self.age = age
    def func(self):
        pass

obj1 = 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 = name
        self.age = age
    def func(self):
        pass
    def __iter__(self):
        # return iter([11,22,33,44])
        yield 11
        yield 22
        yield 33

# obj1是Foo类的一个对象,不可迭代对象
# 如果想要把不可迭代対象 → 可迭代对象
# 1.在类中定义 __iter__ 方法
# 2.iter内部返回一个迭代器(生成器也是一种特殊迭代器)
obj1 = Foo("lin",99)
for item in obj1:
    print(item)

 

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

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

相关文章

DGL创建异构图

利用DGL创建具有3种节点类型和3种边类型的异构图 graph_data {# (src_type, edge_type, dst_type)(drug, interacts, drug): (th.tensor([0, 1]), th.tensor([1, 2])),(drug, interacts,, disease): (th.tensor([1]), th.tensor([2])) }g dgl.heterograph(graph_data)上述代…

C编译环境和预处理(非常详细,建议收藏)

C编译环境和预处理(非常详细,建议收藏) 一、程序的翻译环境和执行环境二、 详解编译链接2.1 翻译环境2.2 编译本身的几个阶段符号汇总、符号表、合并段表、符号表的合并和重定位分别是什么? 2.2 运行环境 三、预处理详解3.1 预定义…

C语言--每日五道选择题--Day19

第一题 1. 为了避免在嵌套的条件语句if-else中产生二义性,C语言规定else子句总是与( )配对。 A:缩排位置相同的if B:之前最近的未匹配的if配对 C:其之后最近的if D:同一行上的if 答案及解析 B e…

一图多码如何分解?快速做二维码解码的方法

当遇到一张图片里面有多个二维码时,想要将图片中的二维码分解成链接或者文本,该如何来操作呢?一般解决这个问题的方法多会通过使用二维码解码器来完成操作,那么对于还不知道的怎么操作的小伙伴,下面的方法可以来学习一…

Linux:安装IDEA开发工具

1、下载 下载地址:https://www.jetbrains.com/idea/download/?sectionlinux 2、上传及解压 将安装包上传到虚拟机,我建的目录是/opt/idea 解压:tar -zxvf ideaIU-2023.2.5.tar.gz 3、启动 启动IDEA需要登陆桌面系统,不能在…

剪辑视频怎么把说话声音转成文字?

短视频已然成为了一种生活潮流,我们每天都在浏览各种短视频,或者用视频的形式记录生活,在制作视频的时候,字幕是一个很大的问题,给视频添加字幕可以更直观、更方便浏览。手动添加太费时间,下面就给大家分享…

bitmap实践-留存计算

目录 1. 介绍2. 留存问题3. 思路解析4. 逻辑4.1 b表建设4.2 留存计算4.3 近X天的访问天数 5.分析 1. 介绍 bitmap方法是数据压缩使用的常用算法,当字段有明确上下界的时候,使用位图模式来减少存储。在业务指标体系中特别适合通用型留存指标的计算。 2.…

数智赋能,众创众治|易知微为“浙江省数字监管应用建模技能竞赛”提供技术支撑!

11月6日至8日,2023年浙江省数字监管应用建模技能竞赛在省金华监狱举行。浙江省监狱管理局党委书记、局长王争,司法部监狱管理局规划科技处处长常家瑛,浙江省监狱管理局党委委员、副局长朱永忠出席本次活动。 本次建模大赛共有来自全省监狱系…

MODBUS转PROFINET网关TS-180连接西门子PLC和工业称重仪表

项目 随着科技的高速发展,工业自动化行业对日益多样的称重需求越来越高,上海某公司在国内的一个 工业自动化项目中,监控中心系统需要远程实时采集工业称重仪表测量的各种称重参数。该系统使用的是 西门子 S7-300 PLC,支持 PROFINE…

邮箱设置第三方登录授权码获取

以QQ邮箱为例 QQ邮箱设置——账户 开启POP3/SMTP服务——完成验证后获得授权码,保存授权码

微信、支付宝、携程等多款app任意文件读取漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、漏洞描述 微信、支付宝、小米浏览器、携程应用等国内主流软件均存…

gin相关操作--一起学习921190764

gin官方文档 https://gin-gonic.com/docs/quickstart/1. 安装 go get -u github.com/gin-gonic/ginhttps://github.com/gin-gonic/gin简单入门 package mainimport ("github.com/gin-gonic/gin""net/http" )func pong(c *gin.Context) {//c.JSON(http.S…

“Python+”集成技术高光谱遥感数据处理

高光谱遥感数据处理的基础、python开发基础、机器学习和应用实践。重点解释高光谱数据处理所涉及的基本概念和理论,旨在帮助学员深入理解科学原理。结合Python编程工具,专注于解决高光谱数据读取、数据预处理、高光谱数据机器学习等技术难题,…

PPT基础:编辑顶点

目录 编辑顶点对顶点的编辑对线段的编辑编辑顶点用法 编辑顶点 所在位置: 实质:是一种改变图像性质的操作 如何把一个圆形变成三角形:选中其中一个顶点,右键删除一个顶点;靠近某一条边,右键“拉伸弓形”即…

壹基金为爱同行到余村,以一步步健行换一滴滴净水

为帮助乡村儿童喝上干净的、足量的饮用水,壹基金联合可口可乐中国发起为爱同行2023安吉余村公益健行活动。本次活动得到了湖州市安吉县天荒坪镇人民政府、湖州市安吉县天荒坪镇余村村村民委员会的大力支持,由深圳市登山户外运动协会、文益社、悦跑圈联合主办。参与健行不仅能感…

「Python编程基础」第3章:控制流

文章目录 一、用“炒菜”简单介绍下“控制流”二、布尔值三、比较运算符四、 和 操作符的区别五、布尔操作符六、混合布尔和比较操作符七、代码块是什么?八、控制流语句1. if 语句2. else语句3. elif语句4. 总结 九、while循环语句十、break语句十一、continue语句…

竞赛选题 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习行人重识别(person reid)系统 该项目…

Windows通过ssh连接远程服务器并进入docker容器

Windows操作系统可以使用vscode通过ssh远程连接ubuntu服务器: 首先下载安装vscode,然后安装插件Remote-SSH: 通过ctlshiftP可以打开Remote-SSH:connect to host; 输入ssh Userhostname -p port host和hostname对应的是…

力扣 2. 两数相加

Problem: 2. 两数相加 思路与算法 Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this…

numpy报错:AttributeError: module ‘numpy‘ has no attribute ‘float‘

报错:AttributeError: module numpy has no attribute float numpy官网:NumPy 报错原因:从numpy1.24起删除了numpy.bool、numpy.int、numpy.float、numpy.complex、numpy.object、numpy.str、numpy.long、numpy.unicode类型的支持。 解决办法…