class frozen(object) :
isFrozen = False
print 'In base'
class layer(frozen):
print isFrozen
我试图理解Python中的继承概念,上面的行是一个愚蠢的例子。当我尝试创建图层类的对象时,父类中的“print”语句正在工作。但它在子类的“print”语句中抛出错误。说“isFrozen”没有定义。
但是,如果我在子类中注释掉“print”语句,我可以创建子类的对象并将“isFrozen”作为“layerObject.isFrozen”访问。
那么,有人可以在这里指出我的误解吗?
答案 0 :(得分:0)
类主体提供了一个名称空间,并且在读取模块时会解析类(与函数不同)(导入时间)。您的问题是您在没有命名空间的情况下调用isFrozen
类的frozen
。另外,为了充分利用继承,您需要一个实际的类实例,通常称为self
:
class Frozen(object):
isFrozen = False
def __init__(self):
print Frozen.isFrozen
print "From Base"
class Layer(Frozen):
def __init__(self):
print self.isFrozen ##this is defined by the parent
print "From subclass"
self.isFrozen = True
print self.isFrozen
In [7]: test_class = Layer()
False
From subclass
True
In [8]: test_class.isFrozen
Out[8]: True
此处也建议使用RTFM。