2011-10-24 10 views
10

में कक्षा में स्थिर ब्लॉक मैं अपेक्षाकृत अजगर लिए नया हूँ मैं केवल एक वर्ग के लिए एक बार कोड का एक खंड को चलाने के लिए चाहते हैं। जावा में स्थिर ब्लॉक की तरह।वहाँ अजगर

उदाहरण के लिए

:

class ABC: 
    execute this once for a class. 

वहाँ किसी भी तरह के अजगर में उपलब्ध विकल्पों है?

जावा में हम इसे इस तरह लिखते हैं। क्लास लोड होने पर, कक्षा के लिए केवल एक बार निष्पादित किया जाता है। हर वस्तु निर्माण के लिए

public class StaticExample{ 
    static { 
     System.out.println("This is first static block"); 
    } 
} 

धन्यवाद

+1

क्या आप अपना कोड '__init__' फ़ंक्शन में नहीं रखना चाहते हैं? –

+2

मुझे लगता है नहीं। प्रत्येक ऑब्जेक्ट सृजन पर __init__ को बुलाया जाता है। मुझे इसे केवल एक बार निष्पादित करने की आवश्यकता है। –

+1

@ root45: जिसे कक्षा के प्रति * उदाहरण * में एक बार बुलाया जाएगा। एम एस कुछ ऐसा मांग रहा है जिसे प्रति वर्ग एक बार बुलाया जाता है। – Crisfole

उत्तर

9

ऐसा करने के लिए सिर्फ वर्ग परिभाषा के तहत सीधे कोड डाल (कक्षा के लिए फ़ंक्शन परिभाषाओं के समानांतर।

कक्षा में सभी कोड सीधे उस प्रकार के निर्माण पर निष्पादित हो जाते हैं वह कक्षा 'नामस्थान। उदाहरण:

class Test: 
    i = 3 
    y = 3 * i 
    def testF(self): 
     print Test.y 

v = Test() 
v.testF() 
# >> 9 

बस आप के लिए जानकारी के अंतिम बिट को भरने के लिए: अपने विधि समारोह def रों भी निष्पादित किया जा रहा है (बस की तरह वे "मार डाला" हो जब आप ग्लोबल नेम स्पेस पर एक समारोह को परिभाषित), लेकिन उन्हें बुलाया नहीं जाता है। ऐसा लगता है कि def निष्पादित करने के लिए कोई स्पष्ट रूप से दिखाई देने वाले परिणाम नहीं हैं।

पायथन का ऑब्जेक्ट-ओरिएंटेड-नेस काफी चालाक है, लेकिन इसके चारों ओर अपने सिर को पाने में थोड़ा सा लगता है! इसे जारी रखें, यह एक बहुत ही मजेदार भाषा है।

+0

धन्यवाद, यह मदद करता है। –

+0

कृपया self.y उपयोग के साथ स्थिर चर/वर्ग चर का उपयोग न करें। कम से कम test.y का उपयोग करें – Artur

+0

हू, कभी नहीं देखा कि मैंने ऐसा किया है। फिक्स्ड। – Crisfole

5
>>> class MyClass(): 
...  print "static block was executed" 
... 
static block was executed 
>>> obj = MyClass() 
>>> 

यहां अजगर में स्थैतिक चर/कार्यों के बारे में अधिक जानकारी के लिए देखें: Static class variables in Python

+0

धन्यवाद, यह मदद करता है। –