2013-07-31 8 views
6

का आयात मैं एक वर्ग है और मैं ऐसा करने से एक डीईएफ़ समारोह आयात करना चाहते हैं:पायथन: एक और .py फ़ाइल

import <file> 

लेकिन जब मैं इसे कहते हैं की कोशिश है, यह कहना है कि डीईएफ़ नहीं पाया जा सकता है। मैंने यह भी कोशिश की:

from <file> import <def> 

लेकिन फिर यह कहता है कि वैश्विक नाम 'x' परिभाषित नहीं किया गया है।

तो मैं यह कैसे कर सकता हूं?

संपादित करें:

यहाँ मैं क्या करना है कोशिश कर रहा हूँ की एक उदाहरण है। file1.py में मेरे पास है:

var = "hi" 

class a: 
    def __init__(self): 
    self.b() 

    import file2 

a() 

और file2.py में मेरे पास है:

def b(self): 
    print(var) 

यह सिर्फ मुझे एक त्रुटि हालांकि दे रहा है।

+0

आप आयात करने का प्रयास कर रहे हैं, क्या यह निर्मित है? और यदि नहीं, तो यह आपकी निर्देशिका निर्देशिका के समान निर्देशिका में है? – Stephan

+0

आप 'फ़ाइल' आयात नहीं करते हैं; आप मॉड्यूल में निहित एक * मॉड्यूल *, या नाम आयात करते हैं। 'आयात modulename', 'filename.py आयात करें' नहीं। अपनी समस्या को बेहतर तरीके से चित्रित करने के लिए आपको एक और ठोस उदाहरण जोड़ना होगा। –

+0

क्या आप अपनी पोस्ट में वास्तविक आयात विवरण और वास्तविक पूर्ण फ़ाइल पथ डाल सकते हैं? – user2357112

उत्तर

7
import file2 

मॉड्यूल file2 लोड करता है और वर्तमान नाम स्थान में नाम file2 को यह बांधता है। file2file2.b के रूप में उपलब्ध है, b नहीं, इसलिए इसे विधि के रूप में पहचाना नहीं गया है। आप

from file2 import b 

साथ इसे ठीक कर सकता है जो मॉड्यूल लोड और नाम b करने के लिए कि मॉड्यूल से b समारोह आवंटित होगा। हालांकि, मैं इसकी सिफारिश नहीं करता। शीर्ष स्तर पर file2 आयात करें और file2.b पर एक विधि को परिभाषित करें, या एक मिश्रित सुपरक्लास को परिभाषित करें जिसे आप अक्सर प्राप्त कर सकते हैं यदि आपको अक्सर असंबंधित कक्षाओं में समान तरीकों का उपयोग करने की आवश्यकता होती है। एक विधि के रूप में इसका उपयोग करने के लिए एक फ़ंक्शन आयात करना भ्रमित है, और यदि आप जिस फ़ंक्शन का उपयोग करने का प्रयास कर रहे हैं तो उसे तोड़ दिया जाता है। सी

संबंधित मुद्दे