如何区分用户定义类和Python 3中内置类之间的区别?

如何区分用户定义类和Python 3中内置类之间的区别?,python,python-3.x,class,types,Python,Python 3.x,Class,Types,我正在将一些Python 2代码移植到Python 3。有一个部分依赖于知道对象是用户定义类的实例还是内置类。使用的Python 2代码: isinstance(my_object.__class__, Types.ClassType) python modernize建议将“Types.ClassType”更改为“type”。这对我不起作用,因为所有对象都返回true,我们是一个“类型”。从我对类和Python3的理解来看,内置类和用户定义类之间已经没有区别了。我已经做了差不多一整天的研究,

我正在将一些Python 2代码移植到Python 3。有一个部分依赖于知道对象是用户定义类的实例还是内置类。使用的Python 2代码:

isinstance(my_object.__class__, Types.ClassType)
python modernize建议将“Types.ClassType”更改为“type”。这对我不起作用,因为所有对象都返回true,我们是一个“类型”。从我对类和Python3的理解来看,内置类和用户定义类之间已经没有区别了。我已经做了差不多一整天的研究,结果一无所获。我不敢相信我是这种情况下唯一的人,但也许我没有找到正确的短语


所以我的问题是,是否有可能区分两者的区别,或者我是否需要重构代码以使其不再重要?

您可能误解了上下文该检查不用于检测用户定义类或内置类之间的差异。这是在检测旧式类之间的差异:

class A:
    pass
class B(object):
    pass
和新式课堂:

class A:
    pass
class B(object):
    pass
在Python3+中,不再存在任何旧式类,无论您是否要求,所有内容都继承自
object
。因此,您需要重写或删除任何为旧式类专门编写的代码


相关阅读:

检查类型的
\uuuuu模块\uuuu
属性。这将告诉您类型的定义位置

>>> class Test: pass
... 
>>> a = 42
>>> b = Test()
>>> type(a).__module__
'builtins'
>>> type(b).__module__
'__main__'

当涉及到来自其他模块的类时,它就不那么琐碎了,但在Python 2中也是如此。

确切地说,为什么需要这种区别?注意,假设您确实导入了类型,并且正在使用未检查用户定义或内置类型的isinstance(my_object.\uu class\uuu,types.ClassType)。注意,如果使用用户定义的新样式类,则返回False。基于此测试,代码的实际执行方式有哪些不同?如果可能会遇到一些有限的内置类型集,那么您可以反转测试-
而不是isinstance(my_object,(int,float,str))