type(obj)obj.__class__ 有什么区别?有没有可能是 type(obj) is not obj.__class__

我想编写一个在提供的对象上通用的函数,使用与另一个参数相同类型的默认值 1。下面的#1 或#2 哪个变体会做正确的事情?

def f(a, b=None):
  if b is None:
    b = type(a)(1) # #1
    b = a.__class__(1) # #2

最佳答案

type(obj)type.__class__ 对于旧样式类的行为不同:

>>> class a(object):
...     pass
...
>>> class b(a):
...     pass
...
>>> class c:
...     pass
...
>>> ai=a()
>>> bi=b()
>>> ci=c()
>>> type(ai) is ai.__class__
True
>>> type(bi) is bi.__class__
True
>>> type(ci) is ci.__class__
False

关于python - type(obj) 和 obj.__class__ 的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1060499/

10-16 03:56