我实现了一个元类,该元类拆解使用它创建的类的类属性,并根据这些参数中的数据构建方法,然后将这些动态创建的方法直接附加到类对象上(所涉及的类可轻松定义Web表单对象,在网络测试框架中使用)。它一直工作得很好,但是现在我需要添加一个更复杂的方法类型,为了保持环境整洁,我将其实现为可调用类。不幸的是,当我尝试在实例上调用可调用类时,将其视为类属性而不是实例方法,并且在调用时仅接收其自己的self。我知道为什么会发生这种情况,但我希望有人能提供比我提出的解决方案更好的解决方案。问题的简化图示:
class Foo(object):
def __init__(self, name, val):
self.name = name
self.val = val
self.__name__ = name + '_foo'
self.name = name
# This doesn't work as I'd wish
def __call__(self, instance):
return self.name + str(self.val + instance.val)
def get_methods(name, foo_val):
foo = Foo(name, foo_val)
def bar(self):
return name + str(self.val + 2)
bar.__name__ = name + '_bar'
return foo, bar
class Baz(object):
def __init__(self, val):
self.val = val
for method in get_methods('biff', 1):
setattr(Baz, method.__name__, method)
baz = …Run Code Online (Sandbox Code Playgroud)