Разницы нет. instance.method(...)
- это class.method(instance, ...)
. Но это не идет вразрез с дзен, так как он говорит (выделение мое):
Должен быть один - и предпочтительно только один - очевидный способ сделать это.
Возможен второй способ, и каждый, кто хорошо знает Python, должен это знать (и почему), но это неочевидный способ сделать это, никто не делает этого в реальном коде.
Так почему же так? Это просто, как методы работают на любом языке - метод - это некоторый код, который работает с объектом / экземпляром (и, возможно, с большим количеством аргументов). За исключением того, что обычно, экземпляр предоставляется неявно (например, this
в C ++ / Java / D) - но поскольку Zen говорит, что «явный лучше, чем неявный», self явно является параметром каждого метода, что неизбежно позволяет это. Явно запрещать это явно бессмысленно.
И, кроме того, тот факт, что методы не вынуждены (неявно) брать экземпляр, позволяет определять методы класса и статические методы без специальной обработки языка - первый - это просто метод, который ожидает класс вместо экземпляр, а последний - просто метод, который вообще не ожидает экземпляр.