Python核心编程这本书的一些错误
2016-06-14 21:56
549 查看
《Python核心编程第二版》这本书比《Python基础教程第二版修订版》详细很多,丰富了很多细节,虽然它是一本经典的入门书,但我发现还是存在一些明显的错误。在面向对象编程这一章,有两个错误
1).它说任何类都有一些内置的特殊的类属性(即程序员不在类中定义也会存在),见截图
2).它说__new__方法比__init__方法更像是类的构造器。见截图:
下面进行测试:
输出结果:
通过分析测试结果可以发现:
对于1),默认情况下,类没有那么多特殊属性。
对于2),默认情况下,任何一个类都不包含__new__方法(dir(MyClass2)可以看到),而且即使程序员显式地定义该方法,类在实例化的时候也不会调用它,而只会调用__init__方法,__new__方法仅仅作为一个普通的实例方法存在,在显式调用它时才会起作用。
测试平台为Windows7,Python2.7.11
1).它说任何类都有一些内置的特殊的类属性(即程序员不在类中定义也会存在),见截图
2).它说__new__方法比__init__方法更像是类的构造器。见截图:
下面进行测试:
#encoding:utf-8 class MyClass(): def doPrint(self): print 'doPrint invoked..' def __init__(self): print '__init__ method invoked..' def __new__(self): print '__new__ method invoked..' def __test__(self): print '__test__ method invoked..' class MyClass2(): pass if __name__=='__main__': print dir(MyClass2) print MyClass2.__dict__ mc=MyClass() mc.__test__() mc.__new__()
输出结果:
['__doc__', '__module__'] {'__module__': '__main__', '__doc__': None} __init__ method invoked.. __test__ method invoked.. __new__ method invoked..
通过分析测试结果可以发现:
对于1),默认情况下,类没有那么多特殊属性。
对于2),默认情况下,任何一个类都不包含__new__方法(dir(MyClass2)可以看到),而且即使程序员显式地定义该方法,类在实例化的时候也不会调用它,而只会调用__init__方法,__new__方法仅仅作为一个普通的实例方法存在,在显式调用它时才会起作用。
测试平台为Windows7,Python2.7.11
相关文章推荐
- LeetCode Dungeon Game
- Python 文档处理doctest
- LeetCode Binary Search Tree Iterator
- Python学习笔记(变量类型)
- python使用MySql数据库学习笔记(入门篇)
- Python字典和集合
- dict(字典)和set
- python2.7安装Matplotlib相关问题
- Python爬虫入门一
- Python小白研究之交互环境使用
- PYTHON_DAY_13_201606011
- PYTHON_DAY_12_20160610
- PYTHON_DAY_11_20160607
- 条件判断和循环
- Python安装MySQLdb
- Python类的特点 (1):构造函数与方法
- python学习—保存网页到本地 html及pdf
- Python里面的字典
- list(列表)和tuple(元组)
- Python sklearn K-means算法及文本聚类实践