old-style class

組み込み関数 super は、指定した属性値を獲得します。

##---------------------------------------- Python 2.1
class Parent:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return "%s"%self.name
    def show(self):
        return "My name is %s"%(
            self.name)

親クラスを指定しないと、そのクラスを頂点とする、新たなクラス階層が形成されます。

class Child(Parent):
    def __init__(self, name, age):
        Parent.__init__(self, name)
        self.age = age
    def __str__(self):
        return "%s, %d"%(
            Parent.__str__(self), self.age)
    def show(self):
        return "%s, and I'm %d years old"%(
            Parent.show(self), self.age)

親クラスのメソッドを呼び出すときには、そのクラス Parent を指定する必要があります。以下のコードを実行すると、

print "-"*40,"Python 2.1"
e = Parent("Jonh Doe")
print e; print e.show()
e = Child("Jane Doe", 23)
print e; print e.show()

次のような出力が得られます。

---------------------------------------- Python 2.1
Jonh Doe
My name is Jonh Doe
Jane Doe, 23
My name is Jane Doe, and I'm 23 years old

new-style class《第2版》

統合された概念モデル(Python 2.2 以降)に沿って、object の傘下に新たなクラスを定義すると、組み込み型/利用者定義クラスの違いを区別せずに扱えます。

##---------------------------------------- Python 2.2
class Parent(object):
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return "%s"%self.name
    def show(self):
        return "My name is %s"%self.name

class Child(Parent):
    def __init__(self, name, age):
        super(Child, self).__init__(name)
        self.age = age
    def __str__(self):
        return "%s, %d"%(
            super(Child, self).__str__(), self.age)
    def show(self):
        return "%s, and I'm %d years old"%(
            super(Child, self).show(), self.age)

親クラスのメソッドを呼び出すときには、組み込み関数 Parent を利用できます。多重継承を認めているので、単に super などと記述できません。

《こちらに移動中です》

Previous|1/2|Next
C#.use(better, IronPython=WPF) 記事一覧
組み込み関数 super

《著》小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2000/05/23 ● 第2版♪2003/01/29 ● 第3版♪2007/05/12 ● 更新♪2008/11/11