看下面的例子
>>> class X:
pass
>>> Y = X
>>> X
<class '__main__.X'>
>>> Y
<class '__main__.X'>
>>> Y == X
True
>>> Y is X
True
以上代码可以理解。但是,看看下面这个
>>> X = type('X', (), {})
>>> Y = type('X', (), {})
>>> X
<class '__main__.X'>
>>> Y
<class '__main__.X'>
>>> X == Y # Shouldn't this be True??
False
>>> X is Y
False
这里X is Y == False
和预期的一样。但是为什么X == Y
是False
?
他们都是同一类人,不是吗
当您使用
class
语句时,会发生两件事。首先,用指定的名称创建一个类。也就是说,这个类有一个__name__
属性,它的值就是这个字符串。其次,该类作为变量分配给该名称打印类时,它会显示
__name__
值:正如您所看到的,当您将X赋给Y时,变量的名称和类的名称可以不同
使用
type
创建类时,每次都创建一个新的不同类。您可以有两个具有相同__name__
的类,每个类分配给不同的变量。你在这里就是这么做的:根据docs:'。。。对于三个参数,返回一个新类型对象'
鉴于第一个例子Y‘参考’X:
相关问题 更多 >
编程相关推荐