【问题标题】:How to tell the difference between a user-defined class and a built-in in Python 3?如何区分用户定义的类和 Python 3 中的内置类?
【发布时间】:2023-04-03 07:53:01
【问题描述】:

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

isinstance(my_object.__class__, Types.ClassType)

python modernize 建议将“Types.ClassType”更改为“type”。这对我不起作用,因为所有对象都返回 true,我们是“类型”。根据我对类和 Python 3 的了解,内置类和用户定义类之间不再有区别。我已经完成了几乎一整天的研究,但一无所获。我不敢相信我是唯一一个处于这种情况的人,但也许我没有找到正确的短语......

所以我的问题是,是否可以区分,还是我需要重构代码以使其无关紧要?

【问题讨论】:

  • 为什么,确切地说,您需要这种区别?请注意,假设您使用了import types 并且正在使用isinstance(my_object.__class__, types.ClassType),它不检查用户定义或内置。请注意,如果您使用用户定义的新样式类,则会返回 False。
  • 根据这个测试,代码实际上做了什么不同的事情?如果可能会遇到一些有限的内置类型集,也许您可​​以反转测试 - 例如not isinstance(my_object, (int, float, str))

标签:
python
python-3.x
class
types