FYI all of the spi strings are defined:
ddwalton@ddwalton-mbp[_platform]# grep spi *.py
brickpi3.py:OUTPUT_A = 'spi0.1:MA'
brickpi3.py:OUTPUT_B = 'spi0.1:MB'
brickpi3.py:OUTPUT_C = 'spi0.1:MC'
brickpi3.py:OUTPUT_D = 'spi0.1:MD'
brickpi3.py:OUTPUT_E = 'spi0.1:ME'
brickpi3.py:OUTPUT_F = 'spi0.1:MF'
You can import them via
from ev3dev2.motor import OUTPUT_A, OUTPUT_B, OUTPUT_C
Same goes for the INPUT strings
So the motor_a, etc objects that you are creating are not going to be used by MoveTank, MoveTank is going to create its own LargeMotor objects. So what you have above will work but this is going down a path that could be very confusing to troubleshoot later :( Something like the following would be much cleaner
wheel_a = MoveTank(OUTPUT_A, OUTPUT_B)
wheel_c = MoveTank(OUTPUT_C, OUTPUT_D)
wheel_a.set_polarity(LargeMotor.POLARITY_INVERSED, [wheel_a.left_motor,])
wheel_c.set_polarity(LargeMotor.POLARITY_INVERSED, [wheel_c.left_motor,])
brickpi cannot auto detect the sensors so you have to use set_device() to specify what is connected on what ports. I don't have a code example handy but if you search in the ev3dev-lang-python repo for set_device() you should be able to find an example (there may be an example in the docs also...not sure).
Can you post the code you are using where the motors go beserk?