从对象重建源

时间:2016-03-21 23:14:40

标签: python parsing python-3.x abstract-syntax-tree

我想从实际的python对象中获取代码。这与AST和parse相反,我在内存中有一个对象,我想重新创建源代码。我不想深入到过分的字节代码,我只想表示构成对象的代码:

In [24]: from django.apps import apps
In [25]: x= apps.get_app('accounts')

In [26]: x
Out[26]: <module 'mysite.accounts.models' from '/home/cchilders/work_projects/mysite/mysite/accounts/models.py'>

In [27]: x.
x.BusinessUnit                       x.models           

In [35]: bizunit = x.BusinessUnit

In [36]: type(bizunit)
Out[36]: django.db.models.base.ModelBase

import something

bizunit_code = something.something(bizunit)

我想要所有模型的来源,但使用ast似乎太毛茸茸,特别是因为django提供了apps模块来抓取所有模型。现在我只需要翻译它

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用以下方式获取源代码:

GetAsyncKeyState

仅当参数是模块,类,方法,函数,回溯,框架或代码对象时才有效。如果Python无法获取源代码,那么这将引发Imports System.Runtime.InteropServices Public Class Form1 <DllImport("user32.dll")> _ Public Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys) As Short End Function Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick If GetAsyncKeyState(Keys.LButton) <> 0 Then Debug.Print("Left button click") ElseIf GetAsyncKeyState(Keys.RButton) <> 0 Then Debug.Print("Right button click") End If End Sub End Class

答案 1 :(得分:0)

如果要从AST重建源文本,可以构建一个漂亮的打印机。

请参阅我的SO答案:https://stackoverflow.com/a/5834775/120163