How to Prepare for Refactoring in Python?

by matjazdrolcon 5/22/2021, 8:07 AMwith 2 comments

Refactoring is inevitable in any sufficiently complex piece of software.

Type system in Java, C++ or C# helps the process immensely. Automated tooling can do most of the heavy lifting there.

In Python type hints are optional. Additionally, many libraries are written such that typing is hard (example: Flask's g object, or SQLAlchemy's models).

How to anticipate refactoring in Python and write code that is easy to refactor?

Things that worked well so far:

- verbose names. Longer variable or function name is less likely to collide with others within a project. Helps to quickly find all places in the project where the variable or function is used.

- ending variable names with _type. Example: `current_user`. Searching for `user.last_login_date` will surface `current_user.last_login_date` too.

by afarrellon 5/22/2021, 2:42 PM

Automated tests.

The books by Harry Percival on this are good.

https://www.obeythetestinggoat.com/

by rajacombinatoron 5/22/2021, 5:53 PM

Big fan of the two you mentioned. A couple more to add would be:

- Use black to format your code. No exceptions.

- Very modular code.

- Tests, although this costs time of course. Focus on meaningful rather than trivial ones if needed.

- Write comments explaining reasoning for particularly dense pieces of logic.

If you practice most of the above, hard to see where you can go wrong.