Python:self .__ class__与type(self)

我想知道是否有区别

class Test(object): def __init__(self): print self.__class__.__name__ 

 class Test(object): def __init__(self): print type(self).__name__ 

是有理由更喜欢一个或另一个?

(在我的使用情况下,我想用它来确定logging器的名称,但我想这没关系)

 >>> class Test(object): pass >>> t = Test() >>> type(t) is t.__class__ True >>> type(t) __main__.Test 

所以那两个是一样的 我会使用self.__class__因为它更明显。

但是, type(t)不适用于旧式类,因为旧式类的instancetypes是instance而新式类instance的types是类:

 >>> class Test(): pass >>> t = Test() >>> type(t) is t.__class__ False >>> type(t) instance 

就我所知,后者只是前者的一种更好的方式。

在Python中实际上并不是那么不寻常,只要调用x.__repr__()len(x)就可以调用x.__len__() 。 Python更喜欢使用内置函数来处理可能在一系列类中使用的常用函数,并且通常通过调用__x__()方法来实现这些function。