有没有办法在 Python 3 中子类化生成器?

2024-05-20

除了显而易见的事情之外,我想我应该尝试一下,以防万一:

def somegen(input=None):
    ...
    yield
    ...

gentype = type(somegen())
class subgen(gentype):
    def best_function_ever():
        ...

唉,Python 的反应相当敌对:

"TypeError: Type generator is not an acceptable base type"

幸运的是,这对我来说是个问题。瞧,我在想也许是这样would如果我有机会的话,成为一个有趣的基础类型。想象一下我的惊讶吧! ..和沮丧。有没有办法让全能的 Python 按照我的方式看待这个问题?

这肯定是一个开箱即用的问题,所以如果你不能立即想出办法,请不要只是说这是不可能的。 Python(尤其是Py3)非常灵活。

当然,如果你有证据证明原因cannot(不是“不应该”)是基本类型(Py3),那么我do想要看到并理解这一点。


一个相关的其他问题是哪些类不能被子类化? https://stackoverflow.com/questions/10061752/which-classes-cannot-be-subclassed.

这是那里接受的答案中的原因2——类型的子类化需要在C中实现,并且它没有为生成器实现,可能是因为没有人看到用例。

生成器对象的源代码是genobject.c http://svn.python.org/view/python/trunk/Objects/genobject.c?view=markup,您可以在第 349 行看到 Py_TPFLAGS_BASETYPE 标志未设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在 Python 3 中子类化生成器? 的相关文章

随机推荐