面向对象

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


面向对象_第1张图片

5.特殊的实例属性

c.__class__:实例化c的类

c.__dict__:c的属性、

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

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

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

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

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

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

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

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


面向对象_第2张图片

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

你可能感兴趣的:(面向对象)