当前位置:天才代写 > tutorial > Python教程 > Python中的Class

Python中的Class

2017-11-02 08:00 星期四 所属: Python教程 浏览:56

尽量Python在Function Programming中有着其他语言难以企及的的优势,可是我们也不要忘了Python也是一门OO语言哦。因此我们存眷Python在FP上的优势的同时,还得相识一下Python在OO方面的特性。

要接头Python的OO特性,相识Python中的Class自然是首当其冲了。在Python中界说class和建设工具实例都很简朴,详细代码如下:

class GrandPa:
    def __init__(self):
        print('I\'m GrandPa')
 
 
class Father(GrandPa):
    def __init__(self):
        print('I\'m Father!')
 
class Son(Father):
    """A simple example class"""
    i = 12345
    def __init__(self):
        print('这是结构函数,son')
    def sayHello(self):
        return 'hello world'
 
if __name__ == '__main__':
    son = Son()
    # 范例辅佐信息 
    print('范例辅佐信息: ',Son.__doc__)
    #范例名称
    print('范例名称:',Son.__name__)
    #范例所担任的基类
    print('范例所担任的基类:',Son.__bases__)
    #范例字典
    print('范例字典:',Son.__dict__)
    #范例地址模块
    print('范例地址模块:',Son.__module__)
    #实例范例
    print('实例范例:',Son().__class__)

运行环境:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32

Type "copyright", "credits" or "license()" for more information.

>>> ================================ RESTART ================================

>>>

这是结构函数,son

范例辅佐信息:  A simple example class

范例名称: Son

范例所担任的基类: (<class '__main__.Father'>,)

范例字典: {'__module__': '__main__', 'sayHello': <function Son.sayHello at 0x010194F8>, '__doc__': 'A simple example class', '__init__': <function Son.__init__ at 0x010194B0>, 'i': 12345}

范例地址模块: __main__

这是结构函数,son

实例范例: <class '__main__.Son'>

>>>

#Python支持多重担任

首先第一点,你会发明Class的界说中有一个括号,这是浮现担任的处所。 Java用extends,C#、C++用冒号(:),Python则用括号了。从括号中包括着两个值,智慧的你必然可以发明:Python支持多重担任;

#__init__是Class中的结构函数

第二点,__init__是Class中的结构函数,两种差异形式的结构函数浮现了Python支持函数重载。在结构函数中,有一个出格的参数self,其寄义与我们在Java和C#中常见的this是一样的。在这里需要强调一点:在Class中界说的要领实质上也是function,可是在要领界说的时候必需包括self这个参数,并且必需将self这个参数放在第一位;

#python成员变量

第三点,在Python中,你并不需要显式的声明Class的Data Members,而是在赋值的时候,被赋值的变量就相应成为了Class的Data Memebers,正如代码中的x和y。不只你不需要显式的声明Data Members,越发出格的,你甚至可以通过del要领将Class中的Data Memebers给删掉。当我第一次看到这样的特性的时候,着实吃了一惊。究竟OO的第一条就是封装了,可是这样的特性是不是粉碎了封装的特性呢?

#python要领二义性问题

第四点,由于Python支持多重担任,因此就有大概呈现要领二义性问题[1]。然而由于Python遵循深度优先的搜寻法例,很好地制止了要领二义性的问题。譬喻在以上的代码中,MyClass同时担任于BaseClassA和BaseClassB,假设MyClass挪用一个叫derivedMethod要领,derivedMethod同时界说在BaseClassA和BaseClassB中,且Signature也完全沟通,那么BaseClassA中的要领将被挪用。假如BaseClassA中并没有界说derivedMethod,而是BaseClassA的父类界说了这个要领的话,将会是BaseClassA的父类中derivedMethod被挪用。总之,担任要领搜索的路径是先从左到右,在选定了一个BaseClass之后,将会一直沿着该BaseClass的担任布局举办搜索,直至最顶端,然后再到别的一个一个BaseClass。

就先说着这么多了,对付Python中OO的特性将会在今后的Post中有进一步的报告。

[1] 要领二义性:由于一个类同时担任于两个可能多个父类,而在这些父类傍边存在着signature完全沟通的要领,那么编译器将无法判定子类将担任哪个父类中的要领,从而导致要领二义性问题

 

    关键字:


天才代写-代写联系方式