我正在尝试在函数内部编写类。如下所示:
def func(**args):
class BindArgs(object):
foo = args['foo']
print 'foo is ', foo
def __init__(self,args):
print " hello i am here"
f = func(foo=2)
我希望打印将被执行..但 init 块没有被执行..虽然print'foo是'存根运行.. 我错过了什么?
我想了解这个模块是如何工作的(https://github.com/tweepy/tweepy/blob/master/tweepy/binder.py)
答案 0 :(得分:2)
你只需要返回一个类的实例......
def func(**args):
class BindArgs(object):
foo = args['foo']
print 'foo is ', foo
def __init__(self,args):
print " hello i am here"
return BindArgs(args) #return an instance of the class
f = func(foo=3)
如果您想稍后调用它,就像您可以做的评论中的示例一样
def func(**args):
class BindArgs(object):
foo = args['foo']
print 'foo is ', foo
def __init__(self,args):
print " hello i am here"
return BindArgs
f = func(foo=3)
f(args="yellow")
答案 1 :(得分:0)
在func
内部,您实际上并未初始化新的BindArgs
对象,因此Python不会调用__init__()
函数。但是,它确实读取了类定义以在函数范围内使用它,因此 执行其他print语句。
答案 2 :(得分:0)
因为 init 只在创建类的实例时才会执行,这在您的函数中没有发生,您必须为此明确调用BindArgs(someobject)
。但是,当您调用func
时,将定义该类,以便执行类定义的内容。