Inv*_*sus 6 python generator subclassing python-3.x
除了显而易见的,我想我会尝试这个,以防万一:
def somegen(input=None):
...
yield
...
gentype = type(somegen())
class subgen(gentype):
def best_function_ever():
...
Run Code Online (Sandbox Code Playgroud)
唉,Python的反应非常恶劣:
"TypeError: Type generator is not an acceptable base type"
Run Code Online (Sandbox Code Playgroud)
幸运的是,这对我来说是一个问题.看,我在想,如果我给它一个机会,它可能是一个有趣的基础类型.想象一下我的惊喜!..并且沮丧.难道没有办法让全能的Python在这个上看到我的方式吗?
这绝对是一个开箱即用的问题,所以请不要只是说如果你不能立刻想到一个方法就不可能.Python(特别是Py3)非常灵活.
当然,如果你有证据证明为什么它不能(不是"不应该")是基类型(Py3),那么我确实希望看到并理解它.
您不能对使用 定义为函数的生成器进行子类化yield,但可以在另一个生成器中使用它。
就拿这个简单的来说:
def alphagen(n=27):
if n<0 or n > 27: n = 27
for i in range(n):
yield chr(ord('A') + i)
Run Code Online (Sandbox Code Playgroud)
你得到 :
>>>> [ a for a in alphagen(10)]
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
Run Code Online (Sandbox Code Playgroud)
您可以将其用于:
def alphastartgen(n=27):
resul = ""
for i in alphagen(n):
resul += i
yield resul
Run Code Online (Sandbox Code Playgroud)
现在你得到:
>>> [ a for a in alphastartgen(8) ]
['A', 'AB', 'ABC', 'ABCD', 'ABCDE', 'ABCDEF', 'ABCDEFG', 'ABCDEFGH']
Run Code Online (Sandbox Code Playgroud)