你能在没有 type 函数的情况下创建 类 吗?
Can you create classes without the type function?
这是一个需要更深入理解的问题,我知道在实践中,像这样的用例是极其罕见的(尽管我很想听到它们)。
如果我没理解错的话,默认用来生成所有类的元类是type(..., ..., ...)
构造函数。在我看到的所有使用 custom meta类 的示例中,在某些时候您仍然会调用 type(..., ..., ...)
构造函数。您可能会 return 一个预先存在的值,但您仍然会在某个时候调用 type
或内置 类 之一来生成您 return 的值。
总是这样吗?有没有办法在某些时候不使用 type
的情况下使用此功能?是否有生成 类 的替代方法? Python 似乎几乎总是在床单下有某种实际上是有协议的技巧。
没有调用类型“函数”(它实际上是一个 class),是的。
没有调用,在某个步骤 type.__new__
方法,没有。
不是在纯 Python 代码中 - 本机代码扩展可能会重用 Python 本身的数据结构。我不建议尝试,但可以玩一下。
不调用 type
的正式方法是使用 types.new_class
。但是,它会在内部调用 type.__new__
。
顺便说一句,对于使用 Python 代码创建任何 class 的任何实例,它与内置类型之一 .__new__
相同。通常需要 object.__new__
,除非你 subclass 其他内置函数之一(int、float、list、dict)——其中一些会绕过 object.__new__
并实例化你的 subclass 直接 - 但他们只能使用本机代码并直接操纵表示对象的结构来做到这一点。
好的,这两件事 应该 使用 ctypes 是可能的,它允许您以“原始”方式操作内存结构并调用内部 API。因此在“纯 Python”中 - 但想法是相同的:您必须重做 object.__new__
或 typing.__new__
和 的工作,正确地 填充表示这些对象的数据结构。这比从 C 文件做同样的事情要麻烦得多。
这是一个需要更深入理解的问题,我知道在实践中,像这样的用例是极其罕见的(尽管我很想听到它们)。
如果我没理解错的话,默认用来生成所有类的元类是type(..., ..., ...)
构造函数。在我看到的所有使用 custom meta类 的示例中,在某些时候您仍然会调用 type(..., ..., ...)
构造函数。您可能会 return 一个预先存在的值,但您仍然会在某个时候调用 type
或内置 类 之一来生成您 return 的值。
总是这样吗?有没有办法在某些时候不使用 type
的情况下使用此功能?是否有生成 类 的替代方法? Python 似乎几乎总是在床单下有某种实际上是有协议的技巧。
没有调用类型“函数”(它实际上是一个 class),是的。
没有调用,在某个步骤 type.__new__
方法,没有。
不是在纯 Python 代码中 - 本机代码扩展可能会重用 Python 本身的数据结构。我不建议尝试,但可以玩一下。
不调用 type
的正式方法是使用 types.new_class
。但是,它会在内部调用 type.__new__
。
顺便说一句,对于使用 Python 代码创建任何 class 的任何实例,它与内置类型之一 .__new__
相同。通常需要 object.__new__
,除非你 subclass 其他内置函数之一(int、float、list、dict)——其中一些会绕过 object.__new__
并实例化你的 subclass 直接 - 但他们只能使用本机代码并直接操纵表示对象的结构来做到这一点。
好的,这两件事 应该 使用 ctypes 是可能的,它允许您以“原始”方式操作内存结构并调用内部 API。因此在“纯 Python”中 - 但想法是相同的:您必须重做 object.__new__
或 typing.__new__
和 的工作,正确地 填充表示这些对象的数据结构。这比从 C 文件做同样的事情要麻烦得多。