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