2010-02-09 9 views
6

मैं बस कक्षाओं के साथ थोड़ा सा गड़बड़ शुरू कर रहा हूं; हालांकि, मैं एक समस्या में चल रहा हूँ।कक्षाओं के साथ पाइथन नौसिखिया को समस्या है

class MyClass(object): 
    def f(self): 
     return 'hello world' 
print MyClass.f 

पिछले स्क्रिप्ट इरादा मान के बजाय <unbound method MyClass.f> लौटा रहा है। मैं यह कैसे तय करुं?

+3

क्या ट्यूटोरियल आप पढ़ रहे हैं? आप इस तरह कोड कहाँ देखा? –

+0

मैं पाठ्यपुस्तक से पढ़ रहा था, हालांकि, यह कोड के बारे में बहुत अस्पष्ट था और एक साधारण उदाहरण प्रदान नहीं किया। तो मैं बस चारों ओर झुका और काम करने के लिए कुछ पाने की कोशिश की। – Pax

उत्तर

14

MyClass.f फ़ंक्शन ऑब्जेक्ट f को संदर्भित करता है जो MyClass की एक संपत्ति है। आपके मामले में, एफ एक उदाहरण विधि है (एक स्व पैरामीटर है) इसलिए इसे किसी विशेष उदाहरण पर बुलाया जाता है। इसका "अनबाउंड" क्योंकि आप एक विशिष्ट वर्ग को निर्दिष्ट किए बिना एफ का जिक्र कर रहे हैं, जैसे किसी कार के बिना स्टीयरिंग व्हील का जिक्र करना।

आप MyClass का एक उदाहरण बना सकते हैं और इसलिए है कि यह से च कॉल कर सकते हैं: (। यह निर्दिष्ट करता है जो उदाहरण के लिए, से च कॉल करने के लिए ताकि आप उदाहरण चर और तरह का उल्लेख कर सकते)

x = MyClass() 
x.f() 

आप static method के रूप में f का उपयोग कर रहे हैं। ये विधियां किसी विशेष वर्ग से बंधी नहीं हैं, और केवल उनके पैरामीटर का संदर्भ दे सकती हैं।

एक स्थिर विधि बनाया है और इसलिए की तरह इस्तेमाल किया जाएगा:

class MyClass(object): 
    def f():     #no self parameter 
     return 'hello world' 
print MyClass.f() 
+0

सहायता के लिए धन्यवाद। – Pax

7

अपनी कक्षा का एक उदाहरण बनाएँ: m = MyClass()

तो m.f() का उपयोग समारोह

अब आप सोच रहे होंगे कि तुम क्यों समारोह के लिए एक पैरामीटर पारित करने के लिए की जरूरत नहीं है कॉल करने के लिए ('स्वयं' परम)। ऐसा इसलिए है क्योंकि जिस घटना पर आप फ़ंक्शन को कॉल करते हैं वह वास्तव में पहले पैरामीटर के रूप में पारित होता है।

वह है, MyClass.f(m)m.f() के बराबर है, जहां m कक्षा MyClass वर्ग का एक उदाहरण वस्तु है।

शुभकामनाएं!

+0

सहायता के लिए धन्यवाद। – Pax

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