我正在开始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
没有附加function
或function2
变量(即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本身内。 非常感谢你们。
答案 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()