我可能会尝试在这里做一些超出可能性范围的事情,但我想我会在放弃希望之前先问一下。所以这就是......
我有2个类,A和B.每个类都有任意数量的函数。 B类将在A类中的某个地方实例化,而A类将通过该实例化利用B类功能之一。 B类中的函数需要使用它的当前A类实例化数据来引用A类函数中的一个或多个。
A类
#!/usr/bin/python
from classB import classB
class classA(object):
def Apple(self):
print("Inside Apple")
b = classB()
b.Banana()
b.bar()
def foo(self):
print("foo inside apple")
a = classA()
a.Apple()
B类:
#!/usr/bin/python
import inspect
class classB(object):
def Banana(self):
print("Inside banana")
def bar(self):
print("bar inside banana")
'''
The following lines just show I can get the names of the
calling class and methods.
'''
stack = inspect.stack()
the_class = stack[1][0].f_locals["self"].__class__
the_method = stack[1][0].f_code.co_name
print("Caller Class: {}".format(the_class))
print("Caller Method: {}".format(the_method))
function_name = 'foo'
if hasattr(the_class, function_name):
print("Class {} has method {}".format(the_class,
function_name))
getattr(the_class, function_name)()
我收到以下错误:
getattr(the_class,function_name)()
TypeError:必须使用classA实例作为第一个参数调用未绑定方法foo()(没有任何内容)
谢谢!
答案 0 :(得分:2)
如错误所示,您必须在调用getattr之前构建 classA (即the_class)的对象。
objA = the_class()
但退后一步,为什么不在初始化时将A级传递给B级?
b = classB(self)
这将允许您访问所需的A类确切方法。
否则,如果方法' foo'在类A中应该是一个静态方法,使用@staticmethod
装饰器来实现它。