class Tren:
    def __init__(self, nom):
        self.nom = nom
        self.__vagons = []

    def __len__(self):
        return len(self.__vagons)

    def __str__(self):
        return "Tren {:s} de {:d} vagons".format(self.nom, len(self))

    def __getitem__(self, i):
        return self.__vagons[i]

    def afegir_vago(self, vago):
        self.__vagons.append(vago)

    def capacitat(self):
        s = 0
        for i in range(len(self)):
            s = s + self[i].capacitat()
        return s


# Solució 2
#    La classe Tren és una seqüència: collections.abc.Sequence
#    Afegeix in, iter, index, count i reversed

from collections.abc import Sequence

class Tren_2(Tren, Sequence):
    pass


# Solució 3
#    Hereta de list

class Tren_3(list):

    def __init__(self, nom):
        super().__init__()
        self.nom = nom

    def __str__(self):
        return "Tren {:s} de {:d} vagons".format(self.nom, len(self))

    def afegir_vago(self, vago):
        self.append(vago)

    def capacitat(self):
        return sum(v.capacitat() for v in self)
