使用 getattr 在单独的 class 中调用函数
Using getattr to call a function in a separate class
我可能正在尝试做一些超出可能性范围的事情,但我想在放弃希望之前我会先问清楚。所以就这样...
我有 2 个 classes,A 和 B。每个 class 都有任意数量的函数。 Class B 将在 Class A 中的某处实例化,并且 Class A 将通过该实例化使用 Class B 函数之一。 Class B 中的一个函数需要引用一个或多个 Class A 的函数,使用它的当前实例化数据 Class A.
Class一个
#!/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()
Class乙:
#!/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: unbound method foo() must be called with classA instance as first argument (got nothing instead)
谢谢!
正如错误提示的那样,您必须在调用 getattr 之前构建 classA(即 the_class)的对象。
objA = the_class()
但是退一步说,你为什么不在初始化的时候把classA传给classB呢?
b = classB(self)
这将使您能够访问您需要的 class A 的确切方法。
否则,如果 class A 中的方法 'foo' 应该是静态方法,请使用 @staticmethod
装饰器使其成为静态方法。
我可能正在尝试做一些超出可能性范围的事情,但我想在放弃希望之前我会先问清楚。所以就这样...
我有 2 个 classes,A 和 B。每个 class 都有任意数量的函数。 Class B 将在 Class A 中的某处实例化,并且 Class A 将通过该实例化使用 Class B 函数之一。 Class B 中的一个函数需要引用一个或多个 Class A 的函数,使用它的当前实例化数据 Class A.
Class一个
#!/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()
Class乙:
#!/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: unbound method foo() must be called with classA instance as first argument (got nothing instead)
谢谢!
正如错误提示的那样,您必须在调用 getattr 之前构建 classA(即 the_class)的对象。
objA = the_class()
但是退一步说,你为什么不在初始化的时候把classA传给classB呢?
b = classB(self)
这将使您能够访问您需要的 class A 的确切方法。
否则,如果 class A 中的方法 'foo' 应该是静态方法,请使用 @staticmethod
装饰器使其成为静态方法。