博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python魔术方法
阅读量:5252 次
发布时间:2019-06-14

本文共 1270 字,大约阅读时间需要 4 分钟。

1. 查看属性

  方法: __dir__

  意义: 返回类或者对象的所有成员名称列表。dir()函数就是调用__dir__()。如果提供__dir__(),则返回属性的列表,否则会尽量从__dict__属性中收集信息。

  如果dir([obj])参数包含方法__dict__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。

  dir()对于不同类型的对象具有不同的行为:

    如果对象是模块对象,列表包含模块的属性名。

    如果对象是类型或者类对象,列表包含类的属性名,及它的基类的属性名。

    否则,列表包含对象的属性名,它的类的属性名和类的基类的属性名。

# animal.py

# cat.py

2. 魔术方法

分类

  创建与销毁: __init__与__del__、hash:可哈希、bool:布尔、可视化、运算符重载、容器和大小、可调用对象、上下文管理、反射、描述器、其他杂项

  方法:__hash__

  意义:内建函数hash()调用的返回值,返回一个整数。如果定义这个方法该类的实例就可hash。

  方法: __eq__

  意义:对应于==操作符,判断2个对象是否相等,返回bool值

  __hash__方法只是返回一个hash值作为set的key,但是去重还需要__eq__来判断2个对象是否相等。

  hash值相等,只是hash冲突,不能说明两个对象是相等的。

  因此,一般来说提供__hash__方法是为了作为set或者dict的key的,所以去重需要同时提供__eq__方法。

  1. 练习:设计二维坐标类Point,比较2个坐标是否相等?

思考:list类为什么不可hash?

  源码中有一句__hash__=None,也就是如果调用__hash__()相当于None(),一定会报错。

  所有类都继承自object,而这个类是具有__hash__()方法的,如果一个类不能被hash,就是把__hash__设置为None了。

  方法:__bool__

  意义:内建函数bool(),或者对象放在逻辑表达式的位置,调用这个函数返回布尔值。没有定义__bool__(),就找__len__()返回长度,非0为真。如果__len__()也没有定义,那么所有实例都返回真。

可视化:

  方法:__repr__

  意义:内建函数repr()对一个对象获取字符串表达。如果一个定义了__repr()但没有定义__str__,那么在请求该类的实例的“非正式”的字符串表示时也将调用__repr__()

  方法:__str__

  意义:str()函数、内建函数format、print()函数调用,需要返回对象的字符串表达

  方法:__bytes__

  意义:bytes的时候,返回一个对象的bytes表达,即返回bytes对象

 

转载于:https://www.cnblogs.com/thinking-jxj/p/7833748.html

你可能感兴趣的文章
如何在vue单页应用中使用百度地图
查看>>
Springboot使用步骤
查看>>
Spring属性注入
查看>>
Springboot-配置文件
查看>>
Springboot-日志框架
查看>>
P1192-台阶问题
查看>>
一、使用pip安装Python包
查看>>
spring与quartz整合
查看>>
Kattis之旅——Eight Queens
查看>>
3.PHP 教程_PHP 语法
查看>>
Duilib扩展《01》— 双击、右键消息扩展
查看>>
利用Fiddler拦截接口请求并篡改数据
查看>>
python习题:unittest参数化-数据从文件或excel中读取
查看>>
在工程中要加入新的错误弹出方法
查看>>
PS 滤镜— — sparkle 效果
查看>>
网站产品设计
查看>>
代理ARP
查看>>
go 学习笔记(4) ---项目结构
查看>>
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>