对Python2与Python3中__bool__方法的差异详解


Posted in Python onNovember 01, 2018

学习Python面向对象编程的时候,遇到了一个很有意思的小问题。Python的__bool__方法不起作用的问题。

我反复读了我手中的教程,确认了我写的代码应该管用。可是在测试的时候却一直不通过,后来发现我实现的__bool__方法似乎并不是Python本身的接口。

代码如下:

class Demo():

def __init__(self,value = 0):

  self.value = value

def __bool__(self):

  return bool(self.value > 5)


obj = Demo()

obj.value = 0

if obj:

print("yes")

else:

print("no")

print(bool(obj))

这几天使用Win10下面的bash用着比较顺手,我就一直在这个环境中进行程序的调试。

测试的结果如下:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08/16$python bool_demo.py

yes

True

这多少有点奇怪,居然跟我预期的不一样。尝试直接调用bool方法发现根本不存在之后,我猜测这或许是py2与py3的一点差异。Win10的Linux子系统中python版本是2.X,具体如下:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08/16$python -V

Python 2.7.6

我在win10上安装的Python版本是3.X,切换CMD只有测试如下:

E:\01_workspace\02_programme_language\03_python\03_OOP\2017\08\16>pythonbool_demo.py

no

False


E:\01_workspace\02_programme_language\03_python\03_OOP\2017\08\16>python-V

Python 3.6.0

最终结果符合预期!

看起来,这应该是Python3与Python2之间的一点接口上的差异。如果从好用的角度考虑,自然是具有这种接口的Python3更加人性化一些。这会给程序员更大的自由度,也能够实现与Python本身集成度更高的代码。

以上这篇对Python2与Python3中__bool__方法的差异详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之Python安装
Sep 12 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
在python中安装basemap的教程
Sep 20 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
Python read函数按字节(字符)读取文件的实现
Jul 03 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
python中关于数据类型的学习笔记
Jul 19 Python
pytorch--之halfTensor的使用详解
May 24 Python
python多线程方法详解
Jan 18 Python
对Python中for复合语句的使用示例讲解
Nov 01 #Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 #Python
使用Python获取并处理IP的类型及格式方法
Nov 01 #Python
使用Python进行目录的对比方法
Nov 01 #Python
详解python Todo清单实战
Nov 01 #Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 #Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 #Python
You might like
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
Extjs学习笔记之七 布局
2010/01/08 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python绘制堆叠柱状图的实例
2019/07/09 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
工作业绩不及格检讨书
2014/10/28 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android