Bor*_*jaX 14 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):
print "defl == %s" % (defl)
class Descend(Base):
default = "default value in descend"
def __init__(self):
super(Descend, self).__init__()
if __name__ == "__main__":
Descend.showDefaultValue()
Run Code Online (Sandbox Code Playgroud)
输出为:"基数默认值"
我想知道为什么"默认"字段没有被Descend类覆盖......有没有办法覆盖它?为什么不被覆盖?
任何提示(或解释页面的链接将不胜感激).谢谢!
Dir*_*irk 12
正在覆盖类变量.尝试
@classmethod
def showDefaultValue(cls):
print "defl == %s" % (cls.default,)
Run Code Online (Sandbox Code Playgroud)
你的方式不起作用的原因更多地与Python处理函数的默认参数而不是类属性的方式有关.defl在Python定义绑定时评估默认值showDefaultValue,这只完成一次.调用方法时,使用的默认值是定义时计算的值.
在您的情况下,defl绑定到default变量的值,就像在执行类体形式时一样Base.无论你showDefaultValue以后如何调用(即,是否通过Base或通过Descend),该值在所有后续调用中都保持固定showDefaultValue.
Joc*_*zel 12
def showDefaultValue(cls, defl=default):
Run Code Online (Sandbox Code Playgroud)
表示default在定义函数时进行评估,就像在Python中一样.所以定义如下:
def showDefaultValue(cls, defl="default value in base"):
Run Code Online (Sandbox Code Playgroud)
此值defl存储为函数对象的默认参数,并在调用不带参数的方法时使用.您可以查看函数的默认值,例如print Descend.showDefaultValue.im_self.default验证这一点.
如果你想从当前的类中获取默认值,那么你可以从那里得到它:
@classmethod
def showDefaultValue(cls, defl=None):
if defl is None:
defl = cls.default
print "defl == %s" % (defl)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11419 次 |
| 最近记录: |