在对象变量中存储函数

时间:2013-11-19 21:11:33

标签: python eclipse function store

我正在开始python并正在使用一些相当复杂的代码,所以如果我的词汇已关闭,请耐心等待。

将Eclipse用于pydev。

我在本地对象变量中存储函数时遇到困难。该函数可以存储在普通的局部变量中,但如果它附加到对象(自身),它将无法工作。

基本上,我有这样的东西:(例如,推广)

foo = StackExchange(inputFunction)

(以下在不同的文件中,相同的包装)

class StackExchange(object):
    def __init__(self,inputFunction):
        self.function = inputFunction
        self.test = 123
        function = inputFunction
        function2 = lambda x:x**2
        self.function2 = function2

以上,在查看eclipse中的变量时,inputFunction存在并且是正确的。

function已创建并存储inputFunction

但是self没有附加functionfunction2变量(即self.function`)。

确实有self.test(正如预期的那样)

类似地,function2被创建并存储lambda函数,但不存储self.function2。我使用此示例来证明inputFunction本身不存在问题。

我当然尝试过这样的事情:

bar = function2
self.function2 = bar

但结果相同。

一般来说,不确定这是日食还是蟒蛇。当我逐步浏览__init__ self变量时,print foo.function变量的行为很奇怪,但不认为值得解释(但值得一提)。

谢谢!

编辑:

在所有回复的帮助下进行测试后

我已经意识到这是eclipse和/或(可能)PyDev插件的问题。

function即使eclipse没有附加到对象foo的变量{{1}},也会返回lambda函数。我误导了。

为什么程序在尝试调用foo时失败.function必须位于inputFunction本身内。 非常感谢你们。

2 个答案:

答案 0 :(得分:0)

我不知道Eclipse和pydev,但以下对我来说很好:

class StackExchange(object):
    def __init__(self, inputFunction):
        self.function = inputFunction
    def call(self, param):
        return self.function(param)

foo = StackExchange(lambda x: x**2)
print(foo.call(4))
=> 16

所以self.function显然可以正常工作,就像你的例子一样。

答案 1 :(得分:0)

我做了uselpa所做的,所以这里有一个不同的方法来考虑。

将方法分配给Class,每个类和类的每个实例化实例都获取方法。但是你添加的方法有一个'自我'的论点......因为一个类的方法假设有自己不是吗?希望这会有所帮助。

class StackExchange(object):
    def __init__(self):
        self.test = 123
        function2 = lambda x:x**2
        self.function2 = function2

def afunction(self):
    print 'something'

if __name__ == '__main__':
    beforese = StackExchange()
    if hasattr(beforese,'function'):
        beforese.function()
    else:
        print "beforese doesn't have function"
    StackExchange.function = afunction
    se = StackExchange()
    se.function()
    beforese.function()