Я думаю, вы делаете что-то немного странное. Вы все равно должны поставить __init__
высоко, если не первый метод. Читаемость является ключевым фактором, и __init__
показывает, что вы ожидаете от основных полей экземпляра.
Вот три варианта. Я предпочитаю первый, так как он документирует метод по умолчанию и потребует наименьшего изменения вашего кода. Последнее работает, но может сбить с толку тех, кому приходится поддерживать ваш код.
class A(object):
def __init__(self, method="foo"):
if callable(method):
method(self)
else:
getattr(self, method)()
def foo(self):
print "something"
class B(object):
def __init__(self, method = None):
if method is None:
self.defaultMethod()
else:
method(self)
def defaultMethod(self):
print "foo"
def _defaultMethod(self):
print self.x
class C(object):
def __init__(self, method = _defaultMethod):
self.x = "bleh"
method(self)
def anotherMethod(self):
print "doing something else"
def defaultMethodProxy(self):
_defaultMethod(self)