我正在尝试创建一个可以在构造中获得任何对象的类,然后将在交互式提示中列出该对象的所有可调用方法。我正在使用PyInquirer
模块进行交互式提示,并使用inspect
模块来获取给定对象的所有方法。
到目前为止,我已经成功地为任何给定对象动态构建了提示,但是当尝试从提示中调用方法之一时,我的程序给出了错误Foo() takes 0 positional arguments but 1 was given
。
我认为它崩溃的原因是在执行时不再有对该对象的引用,因此其引用计数为零,并且该对象已释放。
如果我可以让该类保留其对对象的引用,则可以解决问题。例如
def __init__(self, object):
# Create a local reference the object
self.__object = &object
但是这是无效的python。
如何获得对对象的引用(或手动增加引用计数,然后在__del__
函数中手动减少引用计数)?
ObjectMethodTerminal.py的完整源代码可以在这里https://gitlab.com/snippets/1939696中找到
将示例类别更改为此:
class A:
def Foo(self):
print("Hello")
def Bar(self):
print("World")
def Baz(self):
print("!")
注意方法参数中添加的self
。
如果您首先尝试过此代码:
a = A()
a.Foo()
[在检查班级的漫长旅程之前,您会发现您的错误。