Python: class static member pointing to itself? -


संभव डुप्लिकेट:

कोड एक हजार शब्दों के लायक है:

 > gt; & gt; वर्ग ShortRib (ऑब्जेक्ट): & gt; & gt; & gt; Def __init __ (स्वयं, स्वामी): & gt; & gt; & gt; स्वयं। स्वामी = स्वामी & gt; & gt; & gt; & Gt; & gt; & gt; ... कुछ और तरीकों और सामान ... & gt; & gt; & gt; & Gt; & gt; & gt; & Gt; & gt; & gt; वर्ग गाय (ऑब्जेक्ट): & gt; & gt; & gt; ShortRib = शॉर्टरिब (स्वयं)> gt; & gt; & gt; & Gt; & gt; & gt; & Gt; & gt; & gt; वर्ग ब्राउनचो (गाय): & gt; & gt; & gt; पास & gt; & gt; & gt; & Gt; & gt; & gt; ब्राउनचौ। शॉर्ट रिब। मालिक & lt; क्लास '__मैन __. ब्राउनकॉ' & gt;   

यह काम नहीं करता है, यद्यपि मैं चाहता हूं कि यह होगा। असल में, मैं चाहता हूं कि प्रत्येक कक्षा में कुछ स्थिर / वर्ग चर (मुझे यकीन नहीं है कि यह इस मामले में क्या है?), लेकिन उन सभी लोगों को जानने की जरूरत है कि यह किस वर्ग की है दुर्भाग्यवश, मैं वर्ग घोषणा के शरीर में कक्षा में "प्राप्त" नहीं कर सकता। बेशक, मैं हमेशा यह एक डेकोरेटर का उपयोग कर सकता था:

 > gt; & gt; डीईएफ़ वार्स (** क्वार्ज): & gt; & gt; & gt; डेफ लपेट (सीएलएस): & gt; & gt; & gt; के लिए, kwargs.items में w (): & gt; & gt; & gt; सेटैट्र (सीएलएस, कश्मीर, डब्ल्यू (सीएलएस)) & gt; & gt; & gt; वापसी सीएलएस & gt; & gt; & gt; वापसी लपेटो & gt; & gt; & gt; & Gt; & gt; & gt; @vars (shortRib = lambda cls: ShortRib (cls) & gt; & gt; क्लास ब्राउनकॉ (गाय):> gt; & gt; ... ... gt; >>> >>> >>> ब्राउनकाउ.शॉर्ट रिब। मालिक   

जो काम करेगा.एक और तरीका है कि एक वर्ग डेकोरेटर जो सभी शॉर्ट रब्स और समान स्थिर चर के माध्यम से चला जाता है और कक्षा के घोषणापत्र के पूरा होने के बाद अपने मालिक को सेट करता है। अविश्वसनीय रूप से चहचहाना और एक अनूठा तरीका जो एक बहुत ही आसान ऑपरेशन होना चाहिए: एक कक्षा के स्थिर / कक्षा वाले सदस्यों को पता है कि वे किसके हैं।

क्या ऐसा करने का "उचित" तरीका है?

स्पष्टीकरण:

मैं चाहता हूं कि इन सदस्यों को कक्षा से संबंधित होना चाहिए, न कि उदाहरणों के लिए। मैं लगभग-विशुद्ध रूप से कार्यात्मक शैली के लिए जाने की कोशिश कर रहा हूं , केवल साझा किए गए व्यवहार के विरासत के लिए कक्षाओं का उपयोग करते हुए, और उन सभी के उदाहरणों को नहीं बनाते हैं। उदाहरणों में मेरे कार्यों को सभी फ़ंक्शनों में साझा किए जाने वाले मनमाना के उदाहरणों तक पहुंच देना होता है, जो शुद्ध-प्रकार्यता को तोड़ देगा I यिंग के लिए मैं सिर्फ खाली आवृत्तियों का उपयोग कर सकता हूं जो मैं नहीं छूता, लेकिन मुझे लगता है कि शुद्ध वर्गों का उपयोग करना क्लीनर होगा। "post-text" itemprop = "text"> < P> आप आसानी से ऐसा कर सकते हैं __ नया __ :

  वर्ग ShortRib (वस्तु): def __init __ (स्वयं, स्वामी): self.owner = स्वामी वर्ग गाय (ऑब्जेक्ट) ): ShortRib = None def __new __ (cls, * args, ** kwargs): यदि cls.shortRib == कोई नहीं: cls.shortRib = ShortRib (सीएलएस) वापसी सुपर (गाय, सीएलएस) .__ नया __ (सीएलएस, * आर्ग्स, * * Kwargs) गाय () Cow.shortRib.owner   

या यहां तक ​​कि __ init __ , यदि आप self.__ class ___

आप मेटाकल्स के साथ भी कर सकते हैं:

  वर्ग ShortRib (ऑब्जेक्ट): def __init __ (स्वयं, स्वामी): self.owner = स्वामी वर्ग MetaCow (प्रकार ): डीईएफ़ __new __ (सीएलएस, नाम, बेस, एटर्स): एटर्स ['शॉर्ट रब'] = शॉर्टरिब (सीएलएस) रिटर्न सुपर (मेटाकॉ, सीएलएस) .__ नया __ (सीएलएस, नाम, बेस, एटर्स) वर्ग गाय (ऑब्जेक्ट): __मेटकलास__ = मेटाकॉ गाय.शॉर्ट रिब। मालिक    

Comments

Popular posts from this blog

mysql - BLOB/TEXT column 'value' used in key specification without a key length -

c# - Using Vici cool Storage with monodroid -

python - referencing a variable in another function? -