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)
不适用于旧式类,因为旧式类的instance
types是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。