У меня есть вопрос о лучших методах инициализации класса. Рассмотрим класс, который является сложным и имеет множество членов. Неплохая практика - инициировать их за пределами __init__()
, но как я могу справиться с этой проблемой, не имея огромного метода __init__()
.Лучшая практика для элемента init
Пример:
class A:
def __init__(self):
self.member0 = "a"
# to prevent that the init method gets too big
# put some initialisation outside
init_other_stuff()
def init_other_stuff(self):
self.member1 = "b"
self.member2 = "c"
...
Спасибо заранее.
[обновление] Чтобы уточнить. Цель состоит не в том, чтобы положить материал в другой длинный метод, конечно. Вместо этого вы можете разделить инициализацию на различные части, как:
def init_network_stuff(self):
""" init network setup """
self.my_new_socket = socket.socket(..)
def init_local_stuff(self):
""" init local setup """
self.my_new_logpath = "/foo/bar/log"
...
Трудно дать определенный ответ. По-моему, просто отключить '__init __()' и переместить остальную часть функции в другую функцию просто, чтобы она не стала слишком длинной, совершенно бессмысленно. Кроме того, я считаю, что класс с большим количеством участников является признаком проблемы дизайна сам по себе. –
* Рассмотрите класс, который является сложным и имеет много членов. * Это ваша проблема прямо там. Класс не должен иметь столько атрибутов. Возможно, вам стоит взглянуть на переработку вашей системы классов. – Oin
, поэтому, чтобы избежать длинного __init__, вы перемещаете его содержимое на другой длинный метод (который любой мог вызвать, не понимая, действительно ли это метод init?) – njzk2