• Python核心编程这本书的一些错误


    《Python核心编程第二版》这本书比《Python基础教程第二版修订版》详细很多,丰富了很多细节,虽然它是一本经典的入门书,但我发现还是存在一些明显的错误。在面向对象编程这一章,有两个错误

    1).它说任何类都有一些内置的特殊的类属性(即程序员不在类中定义也会存在),见截图

    2).它说__new__方法比__init__方法更像是类的构造器。见截图:

    下面进行测试:

     1 #encoding:utf-8
     2 class MyClass():
     3     def doPrint(self):
     4         print 'doPrint invoked..'
     5         
     6     def __init__(self):
     7         print '__init__ method invoked..'
     8         
     9     def __new__(self):
    10         print '__new__ method invoked..'
    11         
    12     def __test__(self):
    13         print '__test__ method invoked..'
    14 
    15 class MyClass2():
    16     pass
    17 
    18 if __name__=='__main__':
    19     print dir(MyClass2)
    20     print MyClass2.__dict__
    21     
    22     mc=MyClass()
    23     mc.__test__()
    24     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

  • 相关阅读:
    弹窗
    [转]JNI字段描述符“([Ljava/lang/String;)V”
    [转]JNIEnv解析
    [转]"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
    [转]Linux下如何查看版本信息
    [转]apt-get 与 yum的区别 (转)
    我的tesseract学习记录(二)
    [转]pkg-config的用法
    [转]linux 创建连接命令 ln -s 软链接
    如何写makefile
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/5585596.html
Copyright © 2020-2023  润新知