Мой метод не вызывается, когда я (неправильно?) Использую супер
class Document(object):
def __init__(self,filename):
self.filename = filename
self.edits = 0
def write(self,content):
print "D.write"
fd = open(self.filename,"w")
fd.write(content)
fd.close()
self.edits += 1
class HTMLDocument(Document):
def edit(self,content):
print "HTMLD.edit"
self.validate(content)
# Document.write(self,content)
super(HTMLDocument,self).write(content)
def validate(self,content):
return True
class UpperCaseDocument(Document):
def edit(self,content):
print "UCD.edit"
content = content.upper()
# Document.write(self,content)
super(UpperCaseDocument,self).write(content)
class UpperCaseHTMLDocument(HTMLDocument,UpperCaseDocument):
def edit(self,content):
super(UpperCaseHTMLDocument,self).edit(content)
# HTMLDocument.edit(self,content)
# UpperCaseDocument.edit(self,content)
index = UpperCaseHTMLDocument("index.html")
content = "<html> hi there ! </html>"
# First Edit
index.edit(content)
# Second Edit
# content.replace("t","z")
# index.edit(content)
print index.edits
### output
>>> HTMLD.edit
D.write
1
>>>
Там нет "UCD.edit" в выводе, что означает, что UpperCaseDocument.edit не вызывается. Что мне не хватает?
Спасибо за вашу помощь.
(Если вы думаете, что super вызовет только один метод baseclasse, протестируйте с помощью этого кода:
class A(object):
def save(self):
print "A saves"
class B(A):
def save(self):
self.validate()
print "B validates and saves"
# A.save(self)
super(B,self).save()
def validate(self):
return True
class C(A):
def save(self):
self.validate()
print "C validates and saves"
# A.save(self)
super(C,self).save()
def validate(self):
return True
class D(B,C):
def save(self):
print "D validates and saves"
self.validate()
# B.save(self)
# C.save(self)
super(D,self).save()
def validate(self):
return True
d = D()
d.save()
# output
>>> D validates and saves
B validates and saves
C validates and saves
A saves
>>>
# Both B.save and C.save get called from super.