热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python魔法方法常用_4.python中常用的魔法方法(长期更新)

python中很多设定与c都不一样,比如符号重载,类中对象自身变量的初始化等等,都需要使用魔法方法来进行设定,而不是直接和C

python中很多设定与c都不一样,比如符号重载,类中对象自身变量的初始化等等,都需要使用魔法方法来进行设定,而不是直接和C++一样直接赋值就可以。

而python中魔法方法的特征就是有双下划线来包围在魔法方法名两边,如__str__,__init__等。

一、init方法

init方法是在对象的初始化时候使用的,不同于C++中的对象中直接定义,python对象中的初始化需要在这个魔法方法中来定义。

以时间类为例:

1 classTime(object):2 """docstring for Time"""

3 def __init__(self, hour = 0,minute = 0,second = 0): #这里括号中因为添加了默认值,所以每个都写了,如果不设定默认值,只要个self就可以

4 super(Time, self).__init__()6 self.hour =hour7 self.minute =minute8 self.second = second

二、str方法

str方法控制的是使用print函数打印这个类的对象的时候所表现的形式

同样以时间类为例:

def __str__(self):return '%.2d:%.2d:%.2d'%(self.hour,self.minute,self.second)

这样的话:

1 time = Time(9,8,15)2 print(time)3

4 输出09:08:15

三、操作符重载

以加法操作符重载为例子

1 def __add__(self,other):2 seconds = self.time_to_int()+other.time_to_int()3 return int_to_time(seconds)

和C中差不多只不过格式什么的不一样

__cmp__操作符,也是载入两个对象self和other,重载的是==比较符,当第一个对象比第二个大的时候返回正数,当第二个对象大的时候返回负数,相等时返回0。

四. with中使用的上下文的魔法方法

1 classContextManager(object):2

3 def __enter__(self):4 print "Entering"

5 return "my value"

6

7 def __exit__(self, exc_type, exc_value, traceback):8 print "Exiting"

9

10 with ContextManager() as value:11 printvalue12 输出为:13 Entering14 my value15 Exiting

with :

以上为with的写法,可以看出先执行enter中的内容,在执行block,再执行exit中的。

五、函数增加元信息

def add(x:int, y:int) ->int:return x +yprint(add.__annotations__)

输出:

{'y': , 'return': , 'x': }

>>> help(add)

Help on function add in module __main__:

add(x: int, y: int) -> int

使用以上方式,可以获得函数的使用说明。

以下是看到的一个关于魔法方法的指南,先摘录下来。上边自己遇到了还会更新

1231582-20171001231151684-574534066.png

1231582-20171001231202684-1766023379.png

1231582-20171001231211325-954000365.png

1231582-20171001231216481-129596806.png

1231582-20171001231222731-1856206420.png



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 我们需要用到一个python强大的库:python-dox直接pipinstallpython-docx在项目中加个赤壁赋.docx的空文件附上完整的python代码fromdoc ... [详细]
author-avatar
张雍昊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有