Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中重写类变量_Python_Oop_Inheritance_Class Design - Fatal编程技术网

在python中重写类变量

在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):

我试图了解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()
输出为:“基础中的默认值”

我想知道为什么“默认”字段没有被下降类过度渲染。。。有没有办法覆盖它?为什么它没有被覆盖


任何提示(或链接到解释页面将不胜感激)。谢谢大家!

正在覆盖类变量。试一试

@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)