Данный класс Python, который будет создан только один раз, то есть будет только один объект класса. Мне было интересно, в каких случаях имеет смысл создавать отдельный экземпляр класса, а не работать непосредственно с классом.
Есть похожий вопрос , но он имеет другую направленность:
- речь идет о группировании глобальных переменных и функций в класс и
- Это не специфично для Python. Последнее означает, что оно не учитывает тот факт, что (в Python) классы также являются объектами.
ОБНОВИТЬ:
В Python я могу делать следующее как с классами, так и с объектами:
class A(object):
pass
A.some_state_var = True
# Then later
A.some_state_var = False
my_a = A()
my_a.some_state_var = True
# Then later
my_a.some_state_var = False
Поэтому я не вижу, как выбор между классом и экземпляром этого класса зависит от состояния (в Python). Я могу поддерживать состояние с любым из двух.
Кроме того, мотивация для создания моего экземпляра класса / класса не сводится к выполнению требования Singleton.
Кроме того, речь идет не столько о создании нового типа.
Мотивация состоит в том, чтобы сгруппировать связанный код и данные и иметь к ним интерфейс. Вот почему я изначально смоделировал его как класс в диаграмме классов. Только когда дело дошло до реализации, я начал задаваться вопросом, создавать ли экземпляр этого класса или нет.
Это одна из тех вещей, которая вызовет религиозную войну, если вы сильно в нее втянетесь.
Но в целом практика, которую я видел много раз, заключается в том, что методы класса должны заниматься только созданием экземпляров этого класса.
Если вы думаете о том, что такое класс, какова его цель / поведение, тогда это имеет смысл. Целью класса является создание экземпляров объектов, которые основаны на нем . Это план, который также может построить здание. Класс "Пользователь" создает объекты "пользователь". Класс "Dog" создает объекты "собака" и т. Д. И т. Д.
Если это поведение класса, то имеет смысл, что методы, которые вы добавляете в класс «X», будут заниматься созданием объектов «x».
Поэтому, даже если вам когда-либо понадобится только один объект «x», вы все равно должны его создавать.
Добавление в класс X методов, не связанных с созданием экземпляров объектов «x», может привести к путанице в неожиданном коде. Конечно, в реальном мире есть множество примеров, когда люди все равно это делали, но, как я сказал, этот путь ведет к религиозной войне.
источник