python魔法方法
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(expression, globals=None, locals=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魔法方法的更多相关文章
- Python魔法方法总结及注意事项
1.何为魔法方法: Python中,一定要区分开函数和方法的含义: 1.函数:类外部定义的,跟类没有直接关系的:形式: def func(*argv): 2.方法:class内部定义的函数(对象的方法 ...
- python魔法方法:__getattr__,__setattr__,__getattribute__
python魔法方法:__getattr__,__setattr__,__getattribute__ 难得有时间看看书....静下心来好好的看了看Python..其实他真的没有自己最开始想的那么简单 ...
- python魔法方法大全
1.python魔法方法详解: python魔法方法是可以修改重载的,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而 ...
- python 魔法方法补充(__setattr__,__getattr__,__getattribute__)
python 魔法方法补充 1 getattribute (print(ob.name) -- obj.func())当访问对象的属性或者是方法的时候触发 class F(object): def _ ...
- 1. Python 魔法方法
Python 魔法方法 基础: 如果你想... 所以,你写... Python调用... 初始化一个实例 x = MyClass() x.__init__() 作为一个字符串的"官方&quo ...
- with上下文管理 python魔法方法
with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前 ...
- python 魔法方法诠释
什么是Python魔法方法 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如 ini ...
- python 魔法方法
I am not a creator, I just a porter. Note: Everything is object in python. 对于Python来说一切都是对象,也就是函数的参数 ...
- python 魔法方法之:__getitem__ __setitem__ __delitem__
h2 { color: #fff; background-color: #7CCD7C; padding: 3px; margin: 10px 0px } h3 { color: #fff; back ...
- python 魔法方法(学习过程的笔记)
有小伙伴会问,什么是python的魔法方法,python的魔法方法有什么用呢, 它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两 ...
随机推荐
- redis 配置初体验
下载redis 1.新增start.bat 编辑redis-server redis.windows.conf 2..改动redis.windows.conf配置文件改动password:找到例如以下 ...
- spring-cloud-config-server——Environment Repository(Git Backend)
参考资料: https://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.4.0.RELEASE/single/spring-cl ...
- kafka生产者
1.kafka生产者是线程安全的,她允许多个线程共享一个kafka实例 2.kafka管理一个简单的后台线程,所有的IO操作以及与每个broker的tcp连接通信,如果没有正确的关闭生产者可能会造成资 ...
- MySQL连接java
1.创建一个java project,建一个lib文件. 下载MySQL-connecor. 将下载好的文件打开,将mysql-connector-java-5.0.8-bin.jar文件粘贴复制到l ...
- Unity---判断某个点是否在摄像机的视景范围内
using UnityEngine; [RequireComponent(typeof(Camera))] public class VisualDetectionCamera : MonoBehav ...
- PHP文件PHP代码及运行(适合PHP初学者)
本文转自:https://blog.csdn.net/cnds123/article/details/80700444 如果在warmpserver上运行php只显示源代码,可能是在用记事本保存后缀为 ...
- 从rnn到lstm,再到seq2seq(二)
从图上可以看出来,decode的过程其实都是从encode的最后一个隐层开始的,如果encode输入过长的话,会丢失很多信息,所以设计了attation机制. attation机制的decode的过程 ...
- 记一下JavaScript的几种排序算法
零.写在最前 排序的方法有很多种,这篇文章只是记录我熟悉的算法: 我发现了一个关于排序算法很有趣的网站,把相关的算法演示做成了动画,有兴趣的同学可以看看! 附上SortAnimate网站链接:http ...
- 使用MongoDB数据库(2)(三十六)
快速开始使用Spring-data-mongodb 若MongoDB的安装配置采用默认端口,那么在自动配置的情况下,我们不需要做任何参数配置,就能马上连接上本地的MongoDB.下面直接使用sprin ...
- NopCommerce 更改发票字体
NopCommerce 默认是用~/App_Data/Pdf/FreeSerif.ttf 这个字体的. 用这个字体,发票里的中文不能显示. 可以把c:\windows\font\simhei.ttf ...