1.__call__

实现__call__后,该类的对象可以被调用

举例如:

class test_call_:

    def __init__(self, n):
self.n = n def __call__(self, *args, **kwargs):
print("print",self.n)
self.n +=1 test_call_obj = test_call_(1)
test_call_obj()
test_call_obj()

test_call_obj是类的对象,test_call_实现了__call__后,可以被该类的对象可以被调用,调用后会打印self.n的值

2.__repr__和__str__

repr和str的功能类似,像java的tostring,在print的时候被调用

官网链接:https://docs.python.org/3/reference/datamodel.html?highlight=__str__#object.__repr__

官网上对于__str__的解释,会在format()和print()时被调用,返回值必须是string类型

对于__repr__的定义

注意点:

1.repr在官网上推荐使用为返回值是一个调试类的信息

2.如果类没有实现__str__时 __repr__也会被调用

3.当类的对象被封装到容器中时,会优先调用__repr__,而不是__str__,这个在python官网中有人已经提出来了

https://www.python.org/dev/peps/pep-3140/

针对第3点举例如下

class test_str:
def __repr__(self):
return "repr"
def __str__(self):
return "str" if __name__=="__main__":
test_strObj = test_str()
print([test_strObj])

打印结果为:[repr]

而实际上按照python的做法应该优先调用__str__

print调用__str__和__repr__方法实例

实例1

class test_str:
def __repr__(self):
return "repr"
if __name__=="__main__":
test_strObj = test_str()
print(test_strObj)

结果是打印repr

实例2

class test_str:
# def __repr__(self):
# return "repr"
def __str__(self):
return "str"
if __name__=="__main__":
test_strObj = test_str()
print(test_strObj)

结果是打印str

class test_str:
def __repr__(self):
return "repr"
def __str__(self):
return "str" if __name__=="__main__":
test_strObj = test_str()
print(test_strObj)

结果仍然是打印str,说明,如果存在__str__时会优先调用__str__方法

4.eval

该方法不是魔法方法

eval(expressionglobals=Nonelocals=None)

函数入参为string的表达式,eval会去执行这个字符串并得到返回值

subString = "w>2 and h>1"
r = eval(subString.replace("w","").replace("h",""))
print(r)

打印结果是True,表达式为"3>2 and 4>1",python执行后返回是True

print(eval('1+2'))

打印结果是3

python魔法方法的更多相关文章

  1. Python魔法方法总结及注意事项

    1.何为魔法方法: Python中,一定要区分开函数和方法的含义: 1.函数:类外部定义的,跟类没有直接关系的:形式: def func(*argv): 2.方法:class内部定义的函数(对象的方法 ...

  2. python魔法方法:__getattr__,__setattr__,__getattribute__

    python魔法方法:__getattr__,__setattr__,__getattribute__ 难得有时间看看书....静下心来好好的看了看Python..其实他真的没有自己最开始想的那么简单 ...

  3. python魔法方法大全

    1.python魔法方法详解: python魔法方法是可以修改重载的,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而 ...

  4. python 魔法方法补充(__setattr__,__getattr__,__getattribute__)

    python 魔法方法补充 1 getattribute (print(ob.name) -- obj.func())当访问对象的属性或者是方法的时候触发 class F(object): def _ ...

  5. 1. Python 魔法方法

    Python 魔法方法 基础: 如果你想... 所以,你写... Python调用... 初始化一个实例 x = MyClass() x.__init__() 作为一个字符串的"官方&quo ...

  6. with上下文管理 python魔法方法

    with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前 ...

  7. python 魔法方法诠释

    什么是Python魔法方法 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如 ini ...

  8. python 魔法方法

    I am not a creator, I just a porter. Note: Everything is object in python. 对于Python来说一切都是对象,也就是函数的参数 ...

  9. python 魔法方法之:__getitem__ __setitem__ __delitem__

    h2 { color: #fff; background-color: #7CCD7C; padding: 3px; margin: 10px 0px } h3 { color: #fff; back ...

  10. python 魔法方法(学习过程的笔记)

    有小伙伴会问,什么是python的魔法方法,python的魔法方法有什么用呢, 它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两 ...

随机推荐

  1. (转载)Unity3D开发之编辑器统一修改Text字体

    最近遇到一个需求,就是我们在做完一个场景后,美工感觉字体不好看,效果不是很好,想要换一种字体.UGUI的界面已经搭完,如果要一个一个Text寻找,工作量将是巨大.而且作为程序人员是不会容忍自己做这些机 ...

  2. C++字节对齐汇总

    一.什么是字节对齐 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数 ...

  3. Codeforces Round #495 (Div. 2) D. Sonya and Matrix

    http://codeforces.com/contest/1004/problem/D 题意: 在n×m的方格中,选定一个点(x,y)作为中心点,该点的值为0,其余点的值为点到中心点的曼哈顿距离. ...

  4. python多进程apply与apply_async的区别

    为什么会这样呢? 因为进程的切换是操作系统来控制的,抢占式的切换模式. 我们首先运行的是主进程,cpu运行很快啊,这短短的几行代码,完全没有给操作系统进程切换的机会,主进程就运行完毕了,整个程序结束. ...

  5. Kotlin 循环控制

    For 循环 for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下: for (item in collection) print(item) 循环体可以是一个代码块: for ...

  6. 基于虹软的Android的人脸识别SDK使用测试

    现在有很多人脸识别的技术我们可以拿来使用:但是个人认为还是离线端的SDK比较实用:所以个人一直在搜集人脸识别的SDK:原来使用开源的OpenCV:最近有个好友推荐虹软的ArcFace, 闲来无事就下来 ...

  7. 算法笔记--极大极小搜索及alpha-beta剪枝

    参考1:https://www.zhihu.com/question/27221568 参考2:https://blog.csdn.net/hzk_cpp/article/details/792757 ...

  8. 修改PL/ORACLE字符编码集

    一.pl/sql developer 中文字段显示乱码 原因:因为数据库的编号格式和pl /sql developer的编码格式不统一造成的. 二.查看和修改oracle数据库字符集: select ...

  9. django内置的认证系统

    Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...

  10. git命令及远程仓库操作内容整理

    0.在git官网上下载git对应的适配系统版本 进入到需要管理的目录,打开git终端 1.git相关的基础命令: git init 在当前文件夹下创建一个.git的隐藏文件夹,初始化版本控制器 注:不 ...