First, congrats for making it work!
![ThumbsUp :-+](https://www.eevblog.com/forum/Smileys/default/icon_smile_thumbsup.gif)
About coils vs register, if you know your application can work OK without a register, then use coils. In theory, a register would be preferred.
For the industrial process, a register would be safer than two coils (no matter it's written in Python or C), because writing a register is an atomic operation, all bits are changed at once.
Why being atomic (which is usually a software consideration) would be important for a fan? Because, for example, you may want to increase the ventilation from fan=1 to fan=2 (in binary from 01 to 10). Notice you need to change both bits. If one of the two set-coil commands gives an error, the fan might end in 11, or in 00, instead of the desired 10. Trying to increase a fan, and ending with fan-off instead, could be very bad for the industrial process.
If the fan values are meant to only increment/decrement by 1, then you can use
Gray Code to encode the fan states. Grey code has the property that only one bit at a time changes (at an increment/decrement). In this case, would mean you will never need to send 2 set-coils commands. By choosing Grey code, the fan can be controlled with a single set-coil instead of two.
If the fan states are not incremental, then the Gray code can not fix atomic problems, and to make sure both bits arrived well, you'll have to read back the state of the coils after each set-fan operation.