2016-04-03 15 views
-1

Bir yapılandırma dosyası ve ortam değişkenleri okunarak başlatılması gereken bir nesnem var. Sınıf yöntemleri vardır, sınıfın uygulanmasından önce nesnenin başlatıldığından emin olmak istiyorum.Java/Spring gibi sınıf yöntemlerini çağırmadan önce bir nesne nasıl ayarlanır?

Bu türdeki tüm sınıfları başlatmak için herhangi bir yolu var mı? Muhtemelen kodlarımda bunlardan sadece birkaçı olacak. Bir Java/Spring arka planından geliyorum, sadece @Service'u sınıfın üstüne koyarak veya @PostConstruct'u başlatıcı yönteminin üzerine getirdiğinizden emin olun. Bunu normal Python'da yapmanın temiz bir yolu yoksa, bunu daha kolaylaştıracak bir çerçeve var mı?

Yani sınıf Evet bu

class MyClass(object): 
    def setup(self): 
     # read variables from the environment and config files 

    @classmethod 
    def my_method(cls, params): 
     # run some code based on params and variables initialised during setup 
+1

Öyleyse, * sınıf yöntemlerini kullanmak için bu yöntemlere ihtiyacınız var mı? Burada idare edilecek bir devletin varmış gibi geliyor. –

+0

Kodun –

+0

içinde çalıştığı belirli bir ortam için veritabanı bitiş noktası ve URL'si gibi global bir durum var. Daha sonra 'setup'ı bir sınıf yöntemi haline getirin, her zaman arayın ve bir global ayarlanmış olup olmadığını bu yönteme sahip olun. –

cevap

1

Her zaman, yapmaya çalıştığınız şey gibi görünen basit bir singleton uygulaması kullanabilirsiniz. Bu gönderide, bunun nasıl yapılacağına dair örnekler ve gerçekten de bir singleton'a ihtiyacınız olup olmadığına dair bazı düşünceler var. Is there a simple, elegant way to define singletons?

-2

şöyle görünür. İlk import/MyClass içeren dosyayı yüklediğinizde o _instance iç bulunuyor için

class MyClass(object): 
    def __init__(self): #instead of setup() 
     # read variables from the environment and config files 

    @classmethod 
    def my_method(cls, params): 
     # run some code based on params and variables initialised during setup 
MyClass._instance=MyClass() 

Temelde, bu kez __init__ yapıcısı çalışacaktır. Bu örnek (singleton) daha sonra diğer tüm sınıf yöntemlerinden erişilebilir olacaktır.

+0

Yaptığınız tek şey global isim. 'global_var'' MyClass._namespaced_var'dan çok farklı değil. –

0

Seçenek # 2.

class MyClass(object): 
    # No setup() 
    setting_A="foo" 
    setting_B="bar" 
    dict_of_settings={"foo":"bar"} 
    # basically you can define some class variables here 

    @classmethod 
    def my_method(cls, params): 
     print cls.setting_B # etc 

Bu seçenek hiç bir küresel kodunun kullanımını önler. Ancak, ayarlarınızın ayarlarınızın artık örneği örneğinde kapsüllenmediği fiyata gelir.

İlgili konular