https://stackoverflow.com/questions/10723839/python-naming-conventions-for-interfaces-and-abstract-classes