在python中的函数内编写一个类

时间:2014-07-01 22:59:26

标签: python

我正在尝试在函数内部编写类。如下所示:

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

3 个答案:

答案 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时,将定义该类,以便执行类定义的内容。