在python帮助中显示动态添加的方法和属性

时间:2010-09-25 19:04:05

标签: python

我有一个类,我可以动态添加新的方法和属性。在直接添加新方法(obj.mymethod = foo)时,通过覆盖__getattr__和__setattr__来处理新属性。有没有办法让这些出现,如果我做“帮助(inst)”其中inst是我班级的一个实例?现在我只看到我在源代码中“硬编码”的方法和属性。如果我做“dir(inst)”,这些方法会显示出来。

1 个答案:

答案 0 :(得分:2)

问题是help(inst)提供了有关该实例“inst”派生自的类的信息。

说obj是从A类派生的,然后代替obj.mymethod = foo,如果你做A.mymethod = foo,那么这将显示在help(obj)

请看下面的示例及其输出。

class A(object):
    def __init__(self):
        pass

    def method1(self):
        "This is method1 of class A"
        pass

a = A()
help(a)

def method2(self):
    """ Method 2 still not associated"""
    pass

A.method2 = method2 
# if you did a.method2 = method2
# Then it won't show up in the help() statement below

help(a)

根据文档,如果参数是任何其他类型的对象,则会生成对象的帮助页面。但是从上面的例子中,我看到在类的命名空间中添加方法显示在help()函数中,但是如果你将方法添加到该类的一个实例中,那么它不会显示在help()中