我知道双下划线对于Python类的属性和方法有什么含义,但它对于方法参数是否有特殊含义呢?
看起来你不能将以双下划线开头的参数传递给方法。这很令人困惑,因为你可以在普通函数中这样做。
考虑以下脚本:
def egg(__a=None):
return __a
print "egg(1) =",
print egg(1)
print
class Spam(object):
def egg(self, __a=None):
return __a
print "Spam().egg(__a=1) =",
print Spam().egg(__a=1)
运行这个脚本会产生以下结果:
egg(1) = 1
Spam().egg(__a=1) =
Traceback (most recent call last):
File "/....py", line 15, in <module>
print Spam().egg(__a=1)
TypeError: egg() got an unexpected keyword argument '__a'
我使用Python 2.7.2进行了测试。
以下是一些其他的示例
这个可以工作:
def egg(self, __a):
return __a
class Spam(object):
egg = egg
Spam().egg(__a=1)
这不会:
class Spam(object):
def _egg(self, __a=None):
return __a
def egg(self, a):
return self._egg(__a=a)
Spam().egg(1)
self.__dict__.update(kwds)
这样的东西,但是想要控制函数的行为时。我能想到唯一有效的用于控制行为的参数名称应该以双下划线开头。 - tkf