如何在Python中获取被调用方法(动态添加)的名称?
我有课:如何在Python中获取被调用方法(动态添加)的名称?,python,oop,methods,Python,Oop,Methods,我有课: class SimpleClass: def __init__(self): pass def init_levels(self): levels = get_levels_list() for level in levels: Transplant(foo, Simplelog, method_name=level) 移植是一个用于向类动态添加方法的类: class Transplant:
class SimpleClass:
def __init__(self):
pass
def init_levels(self):
levels = get_levels_list()
for level in levels:
Transplant(foo, Simplelog, method_name=level)
移植是一个用于向类动态添加方法的类:
class Transplant:
def __init__(self, method, host, method_name=None):
self.host = host
self.method = method
self.method_name = method_name
setattr(host, method_name or method.__name__, self)
def __call__(self, *args, **kwargs):
nargs = [self.host]
nargs.extend(args)
return apply(self.method, nargs, kwargs)
Foo是一个用于“移植”的函数:
如何在foo中调用方法名
例如,我执行:
simpleinst = SimpleClass()
simpleinst.init_levels()
如何修改我的代码,以便在foo定义体中调用方法名?您看过了吗
你看过吗
您可以使用函数工厂,
make\u foo
:
关键步骤是重新定义函数的func\u name
属性:
foo.func_name = name
您可以使用函数工厂,
make\u foo
:
关键步骤是重新定义函数的func\u name
属性:
foo.func_name = name
您必须显式地传递它:
class Transplant:
def __init__(self, method, host, method_name=None):
self.host = host
self.method = method
self.method_name = method_name or method.__name__
setattr(host, method_name or method.__name__, self)
def __call__(self, *args, **kwargs):
nargs = [self.host, self.method_name]
nargs.extend(args)
return apply(self.method, nargs, kwargs)
并扩展
foo
以接受它作为参数。您必须显式地传递它:
class Transplant:
def __init__(self, method, host, method_name=None):
self.host = host
self.method = method
self.method_name = method_name or method.__name__
setattr(host, method_name or method.__name__, self)
def __call__(self, *args, **kwargs):
nargs = [self.host, self.method_name]
nargs.extend(args)
return apply(self.method, nargs, kwargs)
并扩展
foo
以接受它作为参数。谢谢!我只是将nargs=[self.host]替换为nargs=[self],现在我有了所有的方法参数。谢谢!我只是将nargs=[self.host]替换为nargs=[self],现在我有了所有的方法参数。
class Transplant:
def __init__(self, method, host, method_name=None):
self.host = host
self.method = method
self.method_name = method_name or method.__name__
setattr(host, method_name or method.__name__, self)
def __call__(self, *args, **kwargs):
nargs = [self.host, self.method_name]
nargs.extend(args)
return apply(self.method, nargs, kwargs)