3.1 什么是魔法函数

类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式。 不要自己定义XX,并不是和某个类挂钩的

class Company(object):def __init__(self, employee_list):self.employee = employee_list# 可迭代def __getitem__(self, item):return self.employee[item]# 长度,实现了len函数def __len__(self):return len(self.employee)company1 = Company(["tom", "bob", "jane"])
#
# company1= company[:2]
#
# print(len(company))for em in company1:print(em)

3.2 python的数据模型以及数据模型对python的影响

只要实现了对应的数据模型,就具有该模型的特性

3.3 魔法函数一览

3.3.1 非数学运算

字符串表示

__repr__  开发模式下调用的

__str__   对对象进行字符串格式化时调用

class Company(object):def __init__(self, employee_list):self.employee=employee_listdef __str__(self):print("str called")return",". join(self. employee)def __repr__(self):print("repr called")return",". join(self. employee)
company=Company(["tom","bob","jane"])
company
# repr(company)
# company.__repr__()
# print(company)repr called
tom,bob,jane

Python数据模型(魔法函数)非数学运算字符串表示__repr____str__集合、序列相关__len____getitem____setitem____delitem____contains__迭代相关__iter____next__可调用__call__with上下文管理器__enter____exit__数值转换__abs____bool____int____float____hash____index__元类相关__new____init__属性相关__getattr__、 __setattr____getattribute__、setattribute____dir__属性描述符__get__、__set__、 __delete__协程__await__、__aiter__、__anext__、__aenter__、__aexit__

Python数据模型(魔法函数)--非数学运算

3.3.2 数学运算

  一元运算符__neg__(-)、__pos__(+)、__abs__二元运算符__lt__(<)、 __le__ <= 、 __eq__ == 、 __ne__ != 、 __gt__ > 、 __ge__ >=算术运算符__add__ + 、 __sub__ - 、 __mul__ * 、 __truediv__ / 、 __floordiv__ // 、 __ mod__ % 、 __divmod__ divmod() 、 __pow__ ** 或 pow() 、 __round__ round()反向算术运算符__radd__ 、 __rsub__ 、 __rmul__ 、 __rtruediv__ 、 __rfloordiv__ 、 __rmod__ 、 __rdivmod__ 、 __rpow__增量赋值算术运算符__iadd__ 、 __isub__ 、 __imul__ 、 __itruediv__ 、 __ifloordiv__ 、 __imod__ 、 __ipow__位运算符__invert__ ~ 、 __lshift__ << 、 __rshift__ >> 、 __and__ & 、 __or__ | 、 __ xor__ ^反向位运算符__rlshift__ 、 __rrshift__ 、 __rand__ 、 __rxor__ 、 __ror__增量赋值位运算符__ilshift__ 、 __irshift__ 、 __iand__ 、 __ixor__ 、 __ior__

数学运算

class Nums(object):def __init__(self,num):self.num=numdef __abs__(self):return abs(self.num)
my_num=Nums(1)
abs(my_num)
1
​
class MyVector(object):def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other_instance):re_vector = MyVector(self.x + other_instance.x, self.y + other_instance.y)return re_vectordef __str__(self):return "x:{x},y:{y}".format(x=self.x, y=self.y)
​
​
first_vec = MyVector(1, 2)
second_vec = MyVector(2, 3)
print(first_vec + second_vec)
​
x:3,y:5

3.4 随便举个例子说明魔法函数的重要性(len函数)

len(set dict list) 会直接调用set dict list数据类型本身cpython的内置实现

在任何对象中都可以去实现魔法函数

只要实现了对应的魔法函数,就能实现Python某些数据类型的功能

gj3 Python数据模型(魔法函数)相关推荐

  1. 零基础学python:魔法函数都有了解吗

    python中常见的内置类型 什么是魔法函数? python的魔法函数总被双下划线包围,它们可以给你的类增加特殊的方法.如果你的对象实现了这些方法中的一个,那么这个方法就会在特殊情况下被调用,你可以定 ...

  2. python中魔法函数_Python魔法函数

    python中定义的以__开头和结尾的的函数.可以随意定制类的特性.魔法函数定义好之后一般不需要我们自己去调用,而是解释器会自动帮我们调用. __getitem__(self, item) 将类编程一 ...

  3. python中魔法函数_02 python中魔法函数

    什么是魔法函数 简单的说,python中的魔法函数,就是以双下划线开头和双下划线结尾的函数,在类中定义后python解释器会执行.所以我们可以根据自己的场景需要使用不同的魔法函数 一个小实例假如我们想 ...

  4. python常用魔法函数

    1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...

  5. python 魔法函数 运行时_16个python常用魔法函数

    ==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较). ·==是比较两个对象是否相等 1.__ init__(): 所有类的超类object,有一个默认包含pass的__ init ...

  6. python常用函数-python常用魔法函数

    1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...

  7. python 的魔法函数

    魔法函数简介 魔法函数是 python 语言的一大特色,魔法函数能增强类的类型,并且可以扩展类的行为.比如新声明的一个类是不能被迭代的,但是我们可以通过增加 __getitem__ 或 __iter_ ...

  8. 16个python常用魔法函数

    1.__ init__():所有类的超类object,有一个默认包含pass的__ init ()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...

  9. Python的魔法函数

    概要 如何定义一个类 类里通常包含什么 各个部分解释 类是怎么来的 type和object的关系 判断对象的类型 上下文管理器 类结构 #!/usr/bin/env python # -*- codi ...

最新文章

  1. 不用恐惧AI的高速发展,论击败阿法狗(零)最简单的方法
  2. 【iOS 开发】Objective-C 入门 Xcode 环境详解
  3. 系统集成知识点整理(五)质量管理
  4. /bin/bash^M: bad interpreter
  5. PHP面试之二:高并发与大数据
  6. 微信开发中,H5的video标签使用
  7. 资深开发者们是如何读书的?---线下读书会记录
  8. 将python算法转为scala_将Python转换为scalaasp
  9. java.lang.NoClassDefFoundError异常处理
  10. BST:Transformer在推荐领域的应用
  11. php dao 接口,SSH中公共Dao层、Dao接口
  12. 第4 章 变量、作用域和内存问题
  13. 2021最新Java JDK1.8的安装教程
  14. Express 框架 以及特性
  15. 姓名大全 导入mysql_My SQL常用操作汇总详解
  16. word文档如何在标题前面加上对应的层级数字编号
  17. input限制只能输入数字,限制输入数字长度或者大小
  18. java断言--assertThat用法
  19. docker运行centos镜像 安装python3.9环境
  20. 声网 VQA:将实时互动中未知的视频画质用户主观体验变可知

热门文章

  1. SPT20 协议_至为芯科技IP5356又一款支持PD输出20W的全协议快充移动电源SOC
  2. 大疆口袋云台 最大存储卡_佳能云台相机专利曝光:可换镜头设计,将与大疆竞争...
  3. oracle number类型能存空吗_《听雪楼》《白发》成爆款类型剧的效仿者,古装剧真的能回暖吗?...
  4. check box 如何调整字体大小_CSS中关于box-sizing你可能需要知道的小知识
  5. java 前端页面传过来的值怎么防止篡改_反爬虫,到底是怎么回事儿?
  6. intellij idea操作maven时控制台中文乱码
  7. 【硬核干货】2500字全方面解读Python的格式化输出
  8. linux 操作mysql 数据库命令_在Linux上用命令怎么连接数据库
  9. 机器学习基础-逻辑回归-09
  10. [PHP] 现代化PHP之路:composer的镜像站设置