在Python中在函数内编写类

1 投票
3 回答
6788 浏览
提问于 2025-04-18 11:48

我正在尝试在一个函数里面写一个类... 大概是这样的:

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")

撰写回答