2010-01-06 20 views
6

मैं अपने अंदर कक्षा उदाहरण बनाना चाहता हूं। मैं इस तरह से यह करने की कोशिश की:उस कक्षा विधि के अंदर कक्षा उदाहरण कैसे बनाएं?

class matrix: 
    (...) 
    def det(self): 
     (...) 
     m = self(sz-1, sz-1) 
     (...) 
    (...) 

लेकिन मैं त्रुटि मिली:

m = self(sz-1, sz-1) 

AttributeError: matrix instance has no __call__ method

तो, मैं इस तरह से यह करने की कोशिश की:

class matrix: 
    (...) 
    def det(self): 
     (...) 
     m = matrix(sz-1, sz-1) 
     (...) 
    (...) 

और मैं एक त्रुटि मिली :

m = matrix(sz-1, sz-1) 

NameError: global name 'matrix' is not defined

बेशक मैट्रिक्स वैश्विक क्लाउ नहीं है एस एस। मुझे नहीं पता कि इस समस्या को कैसे हल किया जाए।

+3

पिछले उदाहरण मेरे लिए काम करता है। – Javier

+0

जैसा कि आपके पास अभी है, 'एम' एक स्थानीय चर होगा, उदाहरण आवृत्ति नहीं, इसलिए यह गायब हो जाएगा जब det() विधि वापस आती है। यह आपके लिए क्या हो रहा है इसके लिए उपयुक्त हो सकता है, लेकिन जब आप कहते हैं कि आप "कक्षा के अंदर उदाहरण" चाहते हैं तो ऐसा लगता है कि आप एम को एक आवृत्ति चर होना चाहते हैं, इस मामले में आपको इसे "स्वयं" के रूप में संदर्भित करने की आवश्यकता है। मी " – MatrixFrog

+0

पाइथन का कौन सा संस्करण आप उपयोग कर रहे हैं? – MatrixFrog

उत्तर

11
m = self.__class__(sz-1, sz-1) 

या

m = type(self)(sz-1, sz-1) 
+1

ठीक है, लेकिन टाइप (स्वयं) मैट्रिक्स है, है ना? तो पाब्लो का दूसरा उदाहरण क्यों काम नहीं करता है? क्या यह सिर्फ जीवन का एक तथ्य है कि आप पाइथन में अपने भीतर से किसी वर्ग को संदर्भित नहीं कर सकते? – MatrixFrog

+0

मैं इस मणि के पक्ष में एक उत्तर का अपना हैक हटा रहा हूं। – manifest

+0

प्रकार (स्वयं)() मेरे लिए काम नहीं करता है, लेकिन स्वयं .__ वर्ग __() ठीक से काम करता है और यह सब कुछ मुझे चाहिए। धन्यवाद;) – pablo

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