在python中重写类变量
我试图了解Python(2.6)是如何处理类、实例等的,在某一点上,我尝试了以下代码:在python中重写类变量,python,oop,inheritance,class-design,Python,Oop,Inheritance,Class Design,我试图了解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):
#/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()
输出为:“基础中的默认值”
我想知道为什么“默认”字段没有被下降类过度渲染。。。有没有办法覆盖它?为什么它没有被覆盖
任何提示(或链接到解释页面将不胜感激)。谢谢大家! 正在覆盖类变量。试一试
@classmethod
def showDefaultValue(cls):
print "defl == %s" % (cls.default,)
您的方法不起作用的原因更多地与Python处理函数的默认参数的方式有关,而不是与类属性有关。defl
的默认值是在Python定义showDefaultValue
的绑定时计算的,并且只执行一次。调用方法时,使用的默认值是定义时计算的值
在您的例子中,defl
被绑定到default
变量的值,就像在执行Base
的类主体形式时一样。无论以后如何调用showDefaultValue
(即通过Base
还是通过down
),该值在showDefaultValue
的所有后续调用中保持不变
def showDefaultValue(cls, defl=default):
这意味着在定义函数时对default
进行求值,这在Python中很常见。那么定义是这样的:
def showDefaultValue(cls, defl="default value in base"):
defl
的此值作为函数对象上的默认参数存储,并在调用不带参数的方法时使用。您可以查看函数的默认值,如print downse.showDefaultValue.im_self.default
,以验证这一点
如果要从当前类获取默认值,则必须从当前类获取默认值:
@classmethod
def showDefaultValue(cls, defl=None):
if defl is None:
defl = cls.default
print "defl == %s" % (defl)