给定Python中某个类的实例,能够确定哪个源代码行定义了每个方法和属性(例如实现1),将非常有用。例如,给定一个模块实验室在
class A(object):
z = 1
q = 2
def y(self): pass
def x(self): pass
class B(A):
q = 4
def x(self): pass
def w(self): pass
定义一个函数,该函数返回一个元组,该元组包含定义或子类化attribute
的源代码中的文件名、类和行。这意味着类主体中的定义,而不是由于过于急切的动态性而导致的最新赋值。如果它对某些属性返回“unknown”就可以了。在
我想在自省Plone时使用这个方法,在Plone中,每个对象都有数百个方法,按类组织而不仅仅是按字母顺序进行排序将非常有用。在
当然,在Python中,您不可能总是合理地知道,但是在大多数静态代码的常见情况下,最好能得到好的答案。在
您正在查找未记录的函数
inspect.classify_class_attrs(cls)
。向它传递一个类,它将返回元组列表('name', 'kind' e.g. 'method' or 'data', defining class, property)
。如果你需要一个特定实例中所有事情的信息,你就必须做额外的工作。在示例:
如果没有静态分析,这或多或少是不可能的,即使这样,它也不会总是有效的。通过检查代码对象,可以得到定义函数的行和在哪个文件中,但除此之外,您无能为力。
inspect
模块可以帮助实现这一点。所以:但请考虑:
^{pr2}$或者更糟:
尤其是在后一种情况下,你想要或期望得到什么?在
您正在查找inspect模块,特别是}。例如
inspect.getsourcefile()
和{a.py:
考虑到Python的动态特性,在更复杂的情况下这样做可能根本不可能。。。在
相关问题 更多 >
编程相关推荐