2017-01-24 11 views
1

Я хочу создать класс службы, который имеет только один экземпляр, поэтому я должен сделать этот класс одиночным, или мне нужно сделать методы как classmethods?python singleton vs classmethod

class PromoService(): 

    @classmethod 
    def create_promo(cls, promotion): 
     #do stuff 
     return promo 

class DiscountPromoService(PromoService): 

    @classmethod 
    def create_promo(cls, promo, discount): 
     promo = super(DiscountPromoService, cls).create_promo(promo) 
     promo.discount = discount 
     promo.save() 
     return promo 

Причина, по которой я не хочу создавать ее в качестве модуля, потому что мне нужно будет подклассифицировать мою службу. Каков самый питонический способ сделать это, вышеупомянутый способ или сделать одноэлементный класс?

+0

является 'DiscountPromoService', чтобы наследовать форму' PromoService'? –

ответ

0

Если вы хотите синглтон, пойдите с одноэлементным. Образец, на который ссылается here, хорошо работает. Вам просто нужно будет сделать что-то вроде:

class PromoService(): 
    _metaclass__ = Singleton 
0

Короткий ответ: По-моему, это сработает.

НО, в смысле чистого паттерна, я боролся с этим вопросом на некоторое время:

ли методы класса Python и класс атрибутов в основном ведут себя как Singleton?

  1. Все экземпляры этого класса не имеют никакого отношения к ним
  2. сам только класс иметь доступ к ним
  3. Существует всегда один из них

Да, чисто Singleton сравнение шаблон провалится простой и простой, но, конечно же, его не за горами?

Не назовет себя экспертом по питону, поэтому с удовольствием узнаю, что взгляды на это будут исправлены по моим предположениям.