м-м-м-да… вот это просто жесть, долго чесал “тыкву” пытаясь понять что же именно вы делаете вот этими всеми строками:
class C(B):
......
b = A.gen(self)
c = B.gen(self)
....
A.get_size(self)*A.get_freedom(self)
Вы не представляете как работают классы в пайтоне?
Сначал хотел посоветовать сделать атрибуты size и freedom атрибутами класса, а не инстанса, или если вы хотите, по какойто причине, чтобы это были таки атрибуты инстанса, защищать их от переопределения с помощью “__” перед именем атрибута. Есть еще совсем извращенный вариант, сдеть gen() статическим методом, а get_freedom() и get_size() методами класса

Но потом понял что это все лишнее.
чутка уменьшил размеры матриц ибо для примера это не важно, классы А и B вобще не трогал, :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from numpy import array, zeros
class A:
def __init__(self):
self.size = 2
self.freedom = 1
def get_size(self):
return self.size
def get_freedom(self):
return self.freedom
def gen(self):
a = zeros([self.size*self.freedom, self.size*self.freedom])
for i in range(0, self.size*self.freedom):
for j in range(0, self.size*self.freedom):
a[i][j] = 1
return a
class B(A):
def __init__(self):
super().__init__()
self.size = 3
self.freedom = 1
def gen(self):
a = zeros([self.size*self.freedom, self.size*self.freedom])
for i in range(0, self.size*self.freedom):
for j in range(0, self.size*self.freedom):
a[i][j] = 2
return a
class C(B):
def __init__(self):
super().__init__()
self.size = 5
self.freedom = 1
def gen(self):
c = zeros([self.size*self.freedom, self.size*self.freedom])
a = A()
b = B()
a_matrix = a.gen()
b_matrix = b.gen()
for i in range(0, a.get_size()*a.get_freedom()):
for j in range(0, a.get_size()*a.get_freedom()):
c[i][j] = a_matrix[i][j]
for i in range(0, b.get_size()*b.get_freedom()):
for j in range(0, b.get_size()*b.get_freedom()):
c[i + a.get_size()*a.get_freedom()][j + a.get_size()*a.get_freedom()] = b_matrix[i][j]
return c
if __name__ == '__main__':
c = C()
print(c.gen())
>>>
[[ 1. 1. 0. 0. 0.]
[ 1. 1. 0. 0. 0.]
[ 0. 0. 2. 2. 2.]
[ 0. 0. 2. 2. 2.]
[ 0. 0. 2. 2. 2.]]
>>>