2010-06-01 10 views
5

मुझे अजगर में कक्षाओं को आयात करने में कोई समस्या नहीं है। मेरा काम प्रवाह इसकक्षा और उसके फ़ंक्शन को दूसरी फ़ाइल से आयात करना

index.py 

    class Template: 

     def header(): 
     def body(): 
     def form(): 
     def footer(): 

display.py 

मैं अपने display.py पेज में समारोह header(), body() और footer() कॉल करना चाहते हैं की तरह हो जाता है। क्या कोई मुझे इस मुद्दे के बारे में पाइथन में स्पष्ट कर देगा। आपकी चिंता के लिए धन्यवाद।

सूचकांक फ़ाइल --- [Index.py] [1]

[1]: http://pastebin.com/qNB53KTE और display.py - "http://pastebin.com/vRsJumzq"

+5

मैं सुझाव है कि आप अधिक अजगर ट्यूटोरियल पर पढ़ने के लिए। वहाँ बहुत सारे उदाहरण हैं। '=]' –

+1

इसके अलावा, कृपया ध्यान दें कि पायथन शैली मार्गदर्शिका (http://www.python.org/dev/peps/pep-0008/) क्लास नामों में कैपWords का उपयोग करने की सिफारिश करती है, सभी लोअरकेस अक्षरों में नहीं। –

+1

कोड के लिए धन्यवाद! हम इसे अन्यथा नहीं समझ सका। अब और जवाब स्वीकार करें। = 3 –

उत्तर

2

अपनी अनुक्रमणिका फ़ाइल के नीचे आप HtmlTemplate ऑब्जेक्ट बनाएं और उस पर सभी विधियों को कॉल करें। चूंकि यह कोड किसी अन्य ब्लॉक में निहित नहीं है, इसलिए जब आप मॉड्यूल आयात करते हैं तो इसे निष्पादित किया जाता है।आपको या तो इसे हटाने की आवश्यकता है या यह देखने के लिए जांचें कि फ़ाइल कमांड लाइन से चल रही है या नहीं।

if __name__ == "__main__": 
    objx=HtmlTemplate() 
    objx.Header() 
    objx.Body() 
    objx.Form() 
    objx.Footer() 
    objx.CloseHtml() 
1

मुझे यकीन है कि अगर मैं आप सही ढंग से समझ नहीं कर रहा हूँ लेकिन मुझे विश्वास है कि आप एक और स्क्रिप्ट में template कक्षा आयात करने के लिए कह रहे हैं। import कथन आपको चाहिए:

from index import template 

foo = template() 

foo.header() 
foo.body() 
foo.footer() 
+1

यहां कुछ टाइपो हैं, जो आपके उत्तर को पूरी तरह से बकवास प्रदान करते हैं। – SilentGhost

+0

@ सिल: मेरे उत्तर का पहला संशोधन वास्तव में काफी छोटी थी। यदि यह कष्टप्रद "आप मानव हैं" सुविधा के लिए नहीं था, तो टाइपों को आपकी टिप्पणी से पहले तय किया गया होगा :) –

7

आपने क्या प्रयास किया है? आयात के बाद Template कक्षा के तरीकों का उपयोग करने का सामान्य तरीका निम्नलिखित होगा।

from index import Template 

t = Template() 
t.header() 
t.body() 
t.footer() 

ईटीए: अपने index.py फ़ाइल (लाइनों 99-105) आप ऊपर से परिभाषित Template वर्ग से सभी कार्यों को कॉल कर रहे के अंत में। यही कारण है कि आप डुप्लिकेट देख रहे हैं।

+1

मैंने आपके जैसा ही प्रयास किया है। लेकिन मुझे हमेशा दो बार शरीर() आदि – MysticCodes

+0

@user की पुनरावृत्ति मिलती है: आप शायद 'टेम्पलेट' के '__init__' से विधियों को कॉल कर रहे हैं। अन्यथा, इस कोड में कुछ भी नहीं है जो डुप्लिकेट उत्पन्न करेगा। – SilentGhost

+0

मैंने अपनी फाइलों के लिए लिंक दिया है धन्यवाद – MysticCodes

1

संपादित करें: ठीक है, मैं देखता हूं कि आपकी समस्या क्या है, आपका कोड दिया गया है।

आप कॉल कर रहे हैं निम्नलिखित:

## Calling all the functions of the class template with object (objx) 
objx=HtmlTemplate() 
objx.Header() 
objx.Body() 
objx.Form() 
objx.Footer() 
objx.CloseHtml() 

और फिर अपनी display.py:

t = HtmlTemplate() 
t.Header() 
t.Body() 

देखें कैसे Body() दो बार फोन किया जाता है?

फुटनोट के रूप में, आपको विधि नामों के लिए लोअरकेस का उपयोग करना चाहिए, और कक्षाओं के लिए कैपिटल शब्द अब आप कर रहे हैं। यह एक अच्छा सम्मेलन है। मैं इसकी बहुत अनुशंसा करता हूं।

आपको केवल display.py में ऑब्जेक्ट का निर्माण करना चाहिए और सभी विधियों को कॉल करना चाहिए।

cgitb.enable() 
print 'Content-type: text/html\n\n' 
print "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/msa.css\" >" 

# [...] 

## Calling all the functions of the class template with object (objx) 
objx=HtmlTemplate() 
# [...]  
objx.CloseHtml() 

यह हर बार जब आप import index बुलाया जाएगा:

+0

हाँ हर फ़ंक्शन में स्वयं पैरामीटर है जो मुझे – MysticCodes

+0

से अवगत है, आपके पास अन्य समस्याएं क्या हैं? क्या आप हमें अधिक कोड प्रदान कर सकते हैं? –

+0

उपरोक्त मेरे वर्कफ़्लो की तरह, मेरे पास index.py फ़ाइल है [दिए गए वर्ग और fucntions के साथ] और index.py फ़ाइल से मैं फॉर्म() से display.py तक मान पास करना चाहता हूं। Display.py में मुझे केवल हेडर(), बॉडी() और पाद लेख() को कॉल करने की आवश्यकता है। लेकिन मैं वही काम कर रहा हूं जैसे आपने कहा, लेकिन प्रदर्शन पृष्ठ में दोहराया गया। प्रदर्शन पृष्ठ इस तरह है- हेडर(), बॉडी(), फॉर्म(), पाद लेख() और फिर बॉडी() और डिस्प्ले पेज से कुछ अन्य कॉन्टेंट। – MysticCodes

1

आप शीर्ष पर निम्न कोड और index.py के नीचे है।

हो रहा रोकने के लिए, एक ब्लॉक में यह इस तरह से रख:

if __name__ == '__main__': 
    cgitb.enable() 
    print 'Content-type: text/html\n\n' 
    print "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/msa.css\" >" 

    # [...] 

    ## Calling all the functions of the class template with object (objx) 
    objx=HtmlTemplate() 
    # [...]  
    objx.CloseHtml() 

... या बेहतर अभी भी इस कोड कार्यों कि कहीं और से कहा जा सकता है डाल दिया।

+0

ओकेई मैंने – MysticCodes

+0

से ऊपर फ़ाइल स्रोत कोड प्रदान किया है नया उत्तर प्रदान किया गया! – Johnsyweb

+0

ऐसा लगता है कि यह एक त्रुटि के साथ है लेकिन display.py में मुझे शीर्ष पर – MysticCodes

1

नीचे समाधान मेरे लिए काम किया:

class1(unittest.TestCase): 
    def method1(self) 

class2(unittest.TestCase): 
    def method2(self): 
     instance_name = class1("method1") 
     instance_name.method1() 
संबंधित मुद्दे