我想知道两者之间是否存在差异
class Test(object):
def __init__(self):
print self.__class__.__name__
Run Code Online (Sandbox Code Playgroud)
和
class Test(object):
def __init__(self):
print type(self).__name__
Run Code Online (Sandbox Code Playgroud)
?
是否有理由偏好其中一个?
(在我的用例中我想用它来确定记录器名称,但我想这没关系)
Thi*_*ter 39
>>> class Test(object): pass
>>> t = Test()
>>> type(t) is t.__class__
True
>>> type(t)
__main__.Test
Run Code Online (Sandbox Code Playgroud)
所以那两个是一样的.我会用,self.__class__
因为它更明显是什么.
但是,type(t)
对于旧式类不起作用,因为旧式类的实例instance
的类型是新类型实例的类型是它的类:
>>> class Test(): pass
>>> t = Test()
>>> type(t) is t.__class__
False
>>> type(t)
instance
Run Code Online (Sandbox Code Playgroud)
据我所知,后者只是做前者的一种更好的方法.
它实际上在Python中并不常见,考虑一下repr(x)
,只是调用x.__repr__()
或者len(x)
只是调用x.__len__()
.Python更喜欢将内置函数用于您可能在一系列类中使用的常用函数,并且通常通过调用__x__()
方法来实现这些函数.