MROを理解するのを手伝ってくれてありがとう。以下は、私の完全なコードと出力です。これが他の人にも役立つことを願っています。
クラス BaseClass(オブジェクト):
def __init__(self, *args, **kwargs):
self.name = kwargs.get('name')
def printName(self):
print "I am called from BaseClass"
print self.name
def setName(self, givenName):
print "I am called from BaseClass"
self.name=givenName
def CalledFromThirdGen(self):
print "I am called from BaseClass and invoked from Third Generation Derived Class"
クラス FirstGenDerived(BaseClass):
def __init__(self, *args, **kwargs):
super(FirstGenDerived, self).__init__(*args, **kwargs)
self.name = kwargs.get('name')
self.FamilyName = kwargs.get('FamilyName')
def printFullName(self):
print "I am called from FirstDerivedClass"
print self.name + ' ' + self.FamilyName
def printName(self):
print "I am called from FirstDerivedClass, although I was present in BaseClass"
print "His Highness " + self.name + ' ' + self.FamilyName
クラス SecondGenDerived(BaseClass):
def __init__(self, *args, **kwargs):
super(SecondGenDerived, self).__init__(*args, **kwargs)
self.name = kwargs.get('name')
self.middleName = kwargs.get('middleName')
self.FamilyName = kwargs.get('FamilyName')
def printWholeName(self):
print "I am called from SecondDerivedClass"
print self.name + ' ' + self.middleName + ' ' + self.FamilyName
def printName(self):
print "I am called from SecondDerivedClass, although I was present in BaseClass"
print "Sir " + self.name + ' ' + self.middleName + ' ' + self.FamilyName
class ThirdGenDerived(FirstGenDerived, SecondGenDerived):
def __init__(self, *args, **kwargs):
super(ThirdGenDerived, self).__init__(*args, **kwargs)
名前== "メイン" の場合:
print "Executing BaseClass"
BaseClass(name='Robin').printName()
print "Executing Instance of BaseClass with SetName \n"
Instance = BaseClass()
Instance.setName("Little John")
Instance.printName()
print "################################################\n"
print "Executing FirstGenDerived with printName and printFullName\n"
FirstGenDerived(name='Robin', FamilyName='Hood').printFullName()
FirstGenDerived(name='Robin', FamilyName='Hood').printName()
print "################################################\n"
print "Executing FirstGenderived with instance\n"
Instance2 = FirstGenDerived(name=None, FamilyName="Hood")
Instance2.setName("Edwards")
Instance2.printFullName()
print "################################################\n"
print "Executing SecondGenDerived with printName and printWholeName\n"
SecondGenDerived(name='Robin', FamilyName='Hood', middleName='Williams').printWholeName()
SecondGenDerived(name='Robin', FamilyName='Hood', middleName='Williams').printName()
print "################################################\n"
print "Executing ThirdGenDerived\n"
ThirdGenDerived(name='Robin', FamilyName='Hood', middleName='Williams').CalledFromThirdGen()
ThirdGenDerived(name='Robin', FamilyName='Hood', middleName='Williams').printName()
print "################################################\n"
出力: BaseClass の実行 I は BaseClass から呼び出されます Robin Executing Instance of BaseClass with SetName
BaseClass から呼び出されます BaseClass から呼び出されます Little John
printName と printFullName を指定して FirstGenDerived を実行する
私は FirstDerivedClass から呼び出されました Robin Hood 私は FirstDerivedClass から呼び出されましたが、BaseClass には出席していましたが、Robin Hood 殿下
インスタンスを使用して FirstGenbuilt を実行する
BaseClass から呼び出されます FirstDerivedClass から呼び出されます Edwards Hood
printName と printWholeName を指定して SecondGenDerived を実行する
私は SecondDerivedClass から呼び出されました Robin Williams Hood 私は SecondDerivedClass から呼び出されましたが、BaseClass には存在していました ロビン・ウィリアムズ・フッド卿
ThirdGenDerived の実行
私は BaseClass から呼び出され、Third Generation Derived Class から呼び出されます 私は FirstDerivedClass から呼び出されますが、私は BaseClass に存在していました ロビン・フッド殿下