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
网友评论