@hpp157
2016-08-12T08:38:48.000000Z
字数 998
阅读 1606
Python
如果你还不是十分的理解Pyhon中的OOP,不要担心;现在我们只是完成了第一阶段的学习而已。我们会在本章更加深入的挖掘和学习之前(也就是上一章)介绍的概念。在本章和接下来的章节里,我们会从另一个角度来看待类的机制。这里,我们打算继续学习类,方法和继承,正式的介绍编写类的方法并且进行扩展.因为类是我们介绍的最后一个命名空间工具,因此,我们也会在此总结一下pyhon的命名空间和作用域的概念。
尽管pyhon的class语句在表面上看起来好像和其他OOP语言的工具很相似,但是,更近观察会发现,它和程序员们所熟悉的其他语言里面的class语句有很大不同。例如,class语句在pyhon中是主要的oop工具,但python和C++不同的是,Python的class语句不是一个声明,就想def一样,一个class语句是一个对象的创建者并且包含一个隐式的赋值过程---当class语句执行时,会生成一个类对象并且存储一个引用或者链接(reference)到前面使用的name里面,也和def一样,一个class语句是一个真正的可执行代码----你的class并不存在,一直到python执行到class语句时,才会定义class。(这一般发生在导入模块时,模块没有导入时,模块的类是不存在的)
方法常常通过实例来调用。不过,通过类调用方法也确实显露出种种特殊的特殊作用。一个常见的场景是涉及构造函数。和所有的属性一样,__init__方法是通过继承查找的。也就是说,在构造的时候,Python只会查找和调用一个__init__,如果一个子类的构造函数需要保证也可以运行超类在构造时的逻辑的话,那么子类必须自身中明确的调用超类的__init__方法
class Super:
def __init__(self,x):
pass
class Sub(super):
def __init__(self,x,y):
Super.__init__(self,x)
pass
I = Sub(1,2)
这是代码有可能直接调用运算符重载方法的环境之一,如果真的想运行超类的构造方法,自然地,你只能用这种方式进行调用。没有这样的调用,子类会完全取代超类的构造函数。要找一个关于这个方法的更真实的使用方法,看上一章里的关于Manager类的例子