This is interesting. There's a problem, though: every Role subclass expected the cleanup() method to not do anything, so they don't call super() to cleanup.

So, two things have to change:
1. You must call cleanup() from super() in all roles that overwrite it;
2. You need to change the docstring, because as it is now it doesn't seem to me that I should be careful about this method and remember to call it.