# -*- coding: utf-8 -*-

'''
Exemplo de uso de sobrecarga de operadores.

Classe Matriz que representa uma matriz com os atributos:
    - dim : Dimensão da Matriz
    - data : Dados da Matriz (valores dos ij's, representado por listas dentro de listas por linha)
    - tipo : Tipo dos dados no campo data (int, float, complex)
'''

class Matriz(object):
    def __init__(self, dim, data, tipo):
        self.dim = dim
        self.data = data
        self.tipo = tipo

    '''
    Método mágico exemplo de sobrecarga de operador.
    Neste caso, o operador aritmético soma (+) é implementado. Caso ocorra uma soma de objetos
    Matriz, tal método será executado.
    Ex.:
        a = Matriz(...)
        b = Matriz(...)
        c = a + b           ===>>> Método __add__ será chamado neste caso
    '''
    def __add__(self, m2):
        C=[]
        for i in range(len(self.data)):
            linha = []
            for j in range(len(self.data[0])):
                list.append(linha,self.data[i][j] + m2.data[i][j])
            list.append(C,linha)
        return Matriz(self.dim, C, self.tipo)
