我在想
class Test(object): def __init__(self): print self.__class__.__name__
还有
class Test(object): def __init__(self): print type(self).__name__
?
有什么理由选择其中一个吗?
(在我的用例中,我想使用它来确定日志记录器的名称,但是我想这并不重要)
据我所知,后者只是做前者的一种更好的方式。
实际上在 Python 中这并不罕见,考虑一下 repr(x),它只调用 x.__repr__()或 len(x),它只调用 x.__len__()。Python 更喜欢将内置函数用于可能在一系列类中使用的常见函数,并且通常通过调用 __x__()方法来实现这些函数。
repr(x)
x.__repr__()
len(x)
x.__len__()
__x__()
>>> class Test(object): pass >>> t = Test() >>> type(t) is t.__class__ True >>> type(t) __main__.Test
这两个是一样的 我会使用 self.__class__,因为它更加明显。
self.__class__
然而,type(t)不适用于旧式类,因为旧式类的实例类型是 instance,而新式类的实例类型是它的类:
type(t)
instance
>>> class Test(): pass >>> t = Test() >>> type(t) is t.__class__ False >>> type(t) instance