2013-04-30 40 views
1

這行代碼失敗在PyPy:PyPy:不能monkeypatch ast類?

expr.__repr__ = lambda self: ast.dump(self, annotate_fields=False) 
TypeError: can't set attributes on type object 'expr' 

即使它工作在正常蟒巨大的,即它給我的AST節點明智__repr__。是否有任何理由不能在PyPy中工作,並且有什麼辦法可以解決它嗎?我嘗試猴子補丁repr函數本身遇到了失敗。

+0

http://clarete.github.io/forbiddenfruit/ ...可能工作...雖然它可能不適用於repr ... – 2013-04-30 23:47:18

+0

@JoranBeasley從那個頁面:「由於禁果是從根本上依賴於C API,這個庫不能用於其他python實現,比如Jython,PyPy等。「 – Dougal 2013-05-01 00:03:50

+0

哦你的權利...對不起...錯過了:( – 2013-05-01 01:51:32

回答

2

不幸的是,沒有簡單的方法。在PyPy上,AST類的行爲類似於像listint這樣的內建類型,因爲你不能改變它們。如果你想定義一個定製的repr,那麼你可以做的最好的就是定義你自己的功能。您可能會發現ast.NodeVisitor類實現這樣的功能。

+1

加入https://bugs.pypy.org/issue1472。 – 2013-05-01 08:51:10