我想了解一下Python(2.6)是如何处理类、实例等的,在某种程度上,我尝试了以下代码:
#/usr/bin/python2.6
class Base(object):
default = "default value in base"
def __init__(self):
super(Base, self).__init__()
@classmethod
def showDefaultValue(cls, defl = default):
print "defl == %s" % (defl)
class Descend(Base):
default = "default value in descend"
def __init__(self):
super(Descend, self).__init__()
if __name__ == "__main__":
Descend.showDefaultValue()
输出为:“以基为单位的默认值”
我想知道为什么“默认”字段没有被下行类过度关注。。。有没有办法覆盖它?为什么不重写?
任何提示(或链接到解释页将不胜感激)。谢谢您!
类变量正在被覆盖。试试看
这种方法不起作用的原因更多地与Python对待函数的默认参数的方式有关,而不是与类属性有关。当Python定义
showDefaultValue
的绑定时,会计算defl
的默认值,并且只执行一次。调用方法时,使用的默认值是定义时计算的值。在您的例子中,
defl
被绑定到default
变量的值,就像在执行Base
的类体形式时一样。无论以后如何调用showDefaultValue
(即,是通过Base
还是通过Descend
),该值在showDefaultValue
的所有后续调用中都保持固定。意味着
default
在定义函数时得到求值,这在Python中很常见。所以定义如下:此值
defl
存储为函数对象上的默认参数,并在调用不带参数的方法时使用。您可以查看像print Descend.showDefaultValue.im_self.default
这样的函数的默认值来验证这一点。如果要从当前类中获取默认值,则可以从那里获取:
相关问题 更多 >
编程相关推荐