![]() |
1
5
这一点都不重要。即使我们挖掘更多不同的属性,也应该可以将这些属性注入动态创建的类中。
现在,即使没有源文件(例如
至于定位代码对象而不依赖源文件(除了
给定一个模块,您可以使用
因此,一个简单的实现可以是:
同样,虽然这对“行为良好”的类有效,但如果需要的话,可以动态创建所有这些属性——但这最终需要一个属性来替换中模块的代码对象
更新 这个版本比较在候选类的所有方法中定义的所有字符串。这将适用于给定的示例类-通过比较其他类成员(如类属性)和其他方法属性(如变量名,甚至可能是字节码),可以获得更高的精度(出于某种原因,模块的代码对象和类主体中的方法的代码对象是不同的实例,尽管代码对象应该是imutable(imutable)。 我将留下上面的实现,它只比较类名,因为它应该更好地理解正在发生的事情。
|
![]() |
2
2
使用python不可能在运行时检测到这种差异。 您可以使用第三方应用程序检查文件,但不能使用该语言,因为无论您如何定义类,它们都应简化为解释器知道如何管理的对象。 在文本操作的预处理步骤中,其他一切都是语法糖和它的死亡。 整个元编程是一种让您接近编译器/解释器工作的技术。 揭示一些类型特征,让您可以自由地使用代码处理类型。 |
![]() |
3
2
这是有可能的。
如果文件同时包含这两个定义,以及
很明显,这依赖于源代码仍然存在并且可以通过inspect找到,这对编译后的代码不起作用,例如在REPL中,可能会被欺骗,这是一种欺骗。实际的代码对象没有区别。 |