Я могу думать только об одной ситуации, в которой это могло бы иметь значение; как насчет того, когда вы наследуете от MyClass
? Сравните:
>>> class MyClass(object):
def __init__(self):
self.do_something()
@staticmethod
def do_something():
print "Base class"
>>> class SubClass(MyClass):
@staticmethod
def do_something():
print "Sub class"
>>> s = SubClass()
Sub class
с:
>>> class MyClass(object):
def __init__(self):
MyClass.do_something()
@staticmethod
def do_something():
print "Base class"
>>> class SubClass(MyClass):
@staticmethod
def do_something():
print "Sub class"
>>> s = SubClass()
Base class
Это надуманный пример, но вы должны рассмотреть то, что вы думаете, что соответствующее поведение должно быть.
Ваш пример рефакторинга для изменения имени класса также является хорошим; self
не нужно обновлять каждый раз, когда вы переименовываете класс, тогда как если у вас есть явные ссылки MyClass
, вы должны их обновить (хорошая IDE сделает это за вас, но если вы можете избежать этого, то лучше).
В java (сильное) соглашение заключается в том, чтобы избежать использования «этого» в статическом контексте. Конечно, статические методы настолько редки в python (функции на уровне модуля лучше всего в большинстве случаев), так что на самом деле это нормально. – roippi
@MartijnPieters: извините, но он * делает * вопрос, cf ответ jonrsharpe. –
Я проголосовал за повторное открытие, понимая, что вопрос был немного меньшим, чем фрагмент заголовка и первого предложения, но может ли он быть переписан, чтобы вместо этого изменить угол различия? –