晴耕雨読

working in the fields on fine days and reading books on rainy days

構造体を継承してコンストラクタをなくす(Python)

構造体を継承してコンストラクタをなくす(Ruby) の続き.

python3 には collections.namedtuple という構造体のような振る舞いをするクラスがある.

下の例では,「name」と「age」というフィールドを持つ構造体 Person を定義して, それを Person クラスが継承している.

from collections import namedtuple

class Person(namedtuple('Person', ['name', 'age'])):
    def hello(self):
        return ("Hello! My name is {} and I'm {} years old." \
                .format(self.name, self.age))

person = Person("Alice", 6)
print(person)         # => Person(name='Alice', age=6)
print(person.age)     # => 6
print(person.hello()) # => Hello! My name is Alice and I'm 6 years old.

namedtuple クラスのインスタンスもまたクラスなので,上のように継承することができる. python で単純に制約のないフィールドを定義したいならば,namedtuple を使うのをおすすめする.