美文网首页
面向对象

面向对象

作者: 苏柏娜 | 来源:发表于2016-11-20 23:19 被阅读12次

    1.类与实例

    新式类,必须继承一个类,即必须有一个父类

    class MyNewObjectType(bases):

    经典类,没有指定父类

    class MyNewObjectType:

    经典类已过时,尽量使用新式类

    实例化:myFirstObject=MyNewObjectType(),一般会将实例赋给一个变量,因为不赋给变量的话,就是没有任何引用,会被垃圾回收器回收的。

    2.将类作为名字空间的容器

    类不做任何事情,实例化后,给变量赋值

    class MyData(object):

        pass

    >>> mathObj=MyData()

    >>> mathObj.x=4

    >>> mathObj.y=5

    >>> mathObj.x+mathObj.y

    9

    3.self

    类中方法会有一个self的参数,代表实例对象本身,必须通过实例来调用,且调用的时候不需要传入self参数。

    查看类的属性的方法:

    1)dir(类名) 2)print 类名.__dict__

    4.特殊的类属性

    C.__name__:类C的名字(字符串)

    C.__doc__:类C的文档字符串

    C.__bases__:类C的所有父类构成的元组

    C.__dict__:类C的属性

    C.__module__:类C定义所在模块

    C.__class__:实例C对应的类

    __name__:对于类来说返回的是类名,对于类型对象来说返回的是类型名

    >>> stype=type("What is your quest?")

    >>> stype.__name__

    'str'

    >>> type(3.13344).__name__

    'float'

    __module__:当类是在本类中时,类所属的模块是__main__

    当是被导入到其他模块时,类所述的模块是来源的模块

    from mymod import C则类的C.__module__为mymod

    5.特殊的实例属性

    c.__class__:实例化c的类

    c.__dict__:c的属性、

    6.调用绑定方法和非绑定方法

    一般情况下都是通过实例去调用方法的,即称为绑定方法

    而在子类中可以通过父类调用父类方法的方式来复用代码,即称为非绑定方法

    7.静态方法和类方法以及实例方法

    实例方法中得传入self参数,表示实例对象,实例方法可以操作实例变量,因为已传入self,在调用实例方法的时候解释器会自动传入实例对象

    静态方法不传self参数,不可以操作实例变量

    类方法传入类本身即cls变量,同样不可以操作实例变量

    但实例方法,静态方法和类方法都可以访问静态变量(类变量)

    8.类的继承

    可继承多个类

    class subClassName(ParentClass1[,ParentClass2,ParentClass3])

    subClassName.__bases__可以查看到父类

    子类可以覆盖父类的方法

    如果在覆盖父类方法时,想重用父类方法,使用super

    class C(P):

        def  __init__(self):

                  super(C,self).__init()

    9.类和实例的内建函数

    issubclass(sub,sup):sub是不是sup的子类

    isinstance(obj1,obj2):判断obj1是不是obj2的实例

    print issubclass(C,P)

    print isinstance(c,C)

    hasattr(obj,attrName)类或实例是否有某个属性

    getattr(obj,attrName)获取类或实例的某个属性

    10.super()函数

    super(type[,obj]):返回此type的父类

    如果obj是一个实例,isinstance(obj,type)必须为True

    如果obj是一个类或类型,issubclass(obj,type)必须返回True

    相关文章

      网友评论

          本文标题:面向对象

          本文链接:https://www.haomeiwen.com/subject/micspttx.html