在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这个部分没有被执行... 尽管打印'foo is '的部分是有运行的... 我到底漏掉了什么呢?
我想搞明白,这个模块是怎么工作的 (https://github.com/tweepy/tweepy/blob/master/tweepy/binder.py)?
3 个回答
0
这是因为init这个方法只有在创建类的实例时才会执行,而在你的函数中并没有发生这种情况。你需要明确地调用BindArgs(someobject)
来实现这个功能。不过,当你调用func
的时候,类的定义已经被执行了,所以类里面的内容会被运行。
0
在func
这个函数里面,你并没有真正创建一个新的BindArgs
对象,所以Python不会调用__init__()
这个初始化函数。不过,它会查看这个类的定义,以便在函数内部使用,所以它会执行其他的print语句...
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")