【发布时间】:2015-06-18 16:18:19
【问题描述】:
我将函数作为参数传递给类构造函数。构造函数将其存储在实例变量中,其他类方法要调用它。
class ComboList(list) :
def __init__(self,a,b,kg) :
list.__init__(self)
self.__kg = kg
# More stuff follows
当我尝试用另一种方法调用函数时,例如:
x = self.__kg('a')
我得到“{AttributeError}''对象没有属性'__kg'。”
当我在 IDE 的“评估表达式”窗口中评估函数调用时,我得到了同样的结果。但是当我评估实例变量本身(“self.__kg”)时,我得到:
result = {function} <function <lambda> at 0x0000000002ED5C18>
...看来属性__kg 已定义了。
出了什么问题?
我可以通过引用参数来调用函数——没问题。
kg(a')
我还可以将参数的值分配给方法变量并调用该变量——没问题。
_kag = kg
_kag('a')
只有对实例变量的引用不起作用。
【问题讨论】:
-
这是name mangling - 试试
_ComboList__kg。或者干脆去掉双下划线。 -
能否请您更新创建
ComboList对象并调用kg 函数的代码? -
jonrsharpe,这是有道理的,但令人惊讶。我知道名称修饰应该使变量难以在定义它们的范围对象之外意外获取。我没想到它会在范围对象内故意变得困难。 @Anand,尚不清楚您的意思是哪种更新。代码没有以任何相关方式更改。如果这仍然需要,请澄清,我会尽量满足你。
-
我的意思是我在 python 3.3 中尝试了你的简化方法,它没有给我任何错误,你能更新至少完整的方法吗,你正在做什么
x = self.__kg('a')
标签: python class instance-variables function-parameter