哪位大哥知道type 与class 的区别? -- 引发的深入理解 ::-- ZoomQuiet [2007-03-08 02:28:26]
1. 讨论
持续中....
1.1. 问题
Class 和 Type 在Py 中有什么区别?
1.2. 理解
Leira Hua <[email protected]>;Mar 7, 2007 5:15 PM
关于type和class的差别,"'Python Types and Objects'"这篇文章讲得非常详
细,推荐阅读。
Nick Cen <[email protected]> ;Mar 7, 2007 8:02 PM
我同意yi huang说的type是内置类型的概念。 在OO里面不管你类怎么定义,类的所有属性最终都是指向一些系统的内置类型。这些类型的名字就叫做type。 我觉得这跟数学里面数的定义一样。1是最基本的,其他的数字都可以通过对1进行加法来定义,而1本身则无法通过加法这个法则来定义。 面向对象也是这样,所有的对象,都可以通过组合其他对象和一些内置属性进行定义。而这些内置属性则是无法通过语言本身提供的面向对象机制定义的。
1.2.1. 理Vs解
shhgs <[email protected]>
|
yi huang <[email protected]>
但是 python 里面 class 也是一个实实在在的对象,他还也有他的类型。 我们应该把所有东西都理解成为对象,对象之间有一种关系叫实例化。 所谓类型是相对而言的,一个对象可以其他对象的类型,同时又是另一个对象的实例。 types 里面只是一些内置的类型而已。 总之 type 和 class 之间到底有没有区别首先得定义这两个概念先,如果说内置类型为 type ,通过 class 语句定义自定义类型为 class 的话,他们当然是有区别的,但这样的定义没有什么意义,因为自定义的类型也可以继承内置的类型,比如: class MyList(list):pass 难道 MyList 是 class,list 就是 type 吗?我想这种区分没有什么意义。 总之把所有东西都当做对象来看就好了,而类型是个相对的概念,类型对于它实例来说是类型,对于他的类型来说是实例! }}}
>>> import types >>> class A:pass ... >>> type(A) == types.ClassType True >>> a = A() >>> type(a) == types.InstanceType True >>> class A(object):pass ... >>> type(A) == type == types.TypeType True >>> a = A() >>> type(a) == A True 我不知道这里你对 type 的定义是什么,如果是指 types 模块里面的那些内置的类型的话,那他们和用户自己定义的类型当然是不同的。不过 python2.2 之后内置类型与自定义类型之间已经没有什么区别,内置类型也可以被继承等。 >>> class MetaClass(type):pass ... >>> class Klass(object): ... metaclass = MetaClass ... >>> obj = Klass() >>> type(obj) == Klass True >>> type(Klass) == MetaClass True 这里 Klass 的 metaclass 不是 type 而是 MetaClass,Klass 实际上等于 MetaClass('Klass', (object, ), {}) ,你说这里的 MetaClass 算 class 还是 type 呢? new 是用来生成 class 的实例的时候被调用,而 metaclass 是用来生成 class 。 meta programming 范围很广,似乎一般定义是说编写把代码当数据操纵的代码。 }}}
class A(object):
a = A() 这里 A 是 new-style class,type(a) 是 A, 而不是 types.InstanceType 。 按照你这里对 type 和 class 的定义,实际上 python2.2 所做的巨大努力,就是为了统一 type 和 class }}}
|