一、object和type的关系
首先了解2条规则
1.若x是A的一个实例,且A是B的子类,那么x也是B的一个实例
2.若B是M的实例,且A是B的子类,那么A也是M的一个实例
首先type为object的子类,(A=type,B=object)
>>> issubclass(type,object)
True
其次object是type的实例(x=object,A=type)
>>> isinstance(object,type)
True
规则1得出object是object的实例(B=object,M=object)
>>> isinstance(object,object)
True
规则2得出type是object的实例
>>> isinstance(type,object)
True
同样可以得到type是type自己实例
>>> isinstance(type,type)
True
PS:python中所有类都是自己本身的子类
>>> class A:
... pass
...
>>> issubclass(A,A)
True
二、object和python中的对象和类
python中的所有对象都是object的实例,所有类都是object的子类(除了旧式类)
>>> class A:
... pass
...
>>> type(A)
<type 'classobj'>
>>> isinstance(A,object)
True
>>> issubclass(A,object)
False
PS:新式类与旧式类的区别
声明上:
>>> class A(object):
... pass
...
>>> class A:
... pass
...
规则:
旧式类是广度优先
class A:
value="a"
class B(A):
pass
class C(A):
value="c"
class D(B,C):
pass
d=D()
print d.value
结果为“a",搜索基类为深度优先
新式类:
class A(object):
value="a"
class B(A):
pass
class C(A):
value="c"
class D(B,C):
pass
d=D()
print d.value
结果为“c",广度优先
PS:p y3.0中2种声明都为新式类,若要声明旧式类,括号中需制定为旧式类