बहुत सारे आपूर्ति किए गए उत्तरों के लिए प्रति व्यक्ति इतनी सारी लाइनों की आवश्यकता होती है, जैसे / और / या - मैं कई गुणों के लिए आवश्यक पुनरावृत्ति के कारण एक बदसूरत या थकाऊ कार्यान्वयन पर क्या विचार करूंगा, आदि मैं उबलती चीजों को नीचे रखना / उन्हें सरल करना पसंद करता हूं जब तक कि वे नहीं करते। अब या तब तक सरलीकृत नहीं किया जा सकता जब तक कि ऐसा करने के लिए बहुत उद्देश्य नहीं है।
संक्षेप में: पूर्ण किए गए कार्यों में, यदि मैं कोड की 2 पंक्तियों को दोहराता हूं, तो मैं आमतौर पर इसे एक ही लाइन हेल्पर फ़ंक्शन में बदल देता हूं, और इसी तरह ... मैं गणित या विषम तर्कों को सरल करता हूं जैसे (start_x, start_y, end_x, end_y) (x, y, w, h) अर्थात x, y, x + w, y + h (कभी-कभी मिनट / अधिकतम की आवश्यकता होती है या यदि w / h नकारात्मक होते हैं और कार्यान्वयन इसे पसंद नहीं करता है, तो मैं x / से घटा दूंगा) y और abs w / h। आदि ..)।
आंतरिक गेटर्स / सेटर को ओवरराइड करना एक अच्छा तरीका है, लेकिन समस्या यह है कि आपको हर वर्ग के लिए, या उस आधार पर क्लास को पेरेंट करने की आवश्यकता है ... यह मेरे लिए काम नहीं करता है जैसा कि मैं करना चाहता हूं। वंशानुक्रम, बाल नोड्स, आदि के लिए बच्चों / माता-पिता को चुनने के लिए स्वतंत्र।
मैंने एक समाधान बनाया है जो डेटा को आपूर्ति करने के लिए डिक्ट डेटा-प्रकार का उपयोग किए बिना प्रश्न का उत्तर देता है क्योंकि मुझे लगता है कि डेटा दर्ज करने के लिए थकाऊ होना चाहिए, आदि ...
मेरे समाधान के लिए आपको अपनी कक्षा के ऊपर 2 अतिरिक्त लाइनें जोड़ने की आवश्यकता है, जिस वर्ग के लिए आप गुण जोड़ना चाहते हैं, उसके लिए एक आधार वर्ग बनाएं, फिर प्रति पंक्ति 1 पंक्ति और आपके पास डेटा को नियंत्रित करने के लिए कॉलबैक जोड़ने का विकल्प है, डेटा परिवर्तन होने पर आपको सूचित करें डेटा को सीमित करें जो मूल्य और / या डेटा-प्रकार, और बहुत कुछ के आधार पर सेट किया जा सकता है।
आपके पास _object.x, _object.x = value, _object.GetX (), _object.SetX (मान) का उपयोग करने का विकल्प है और वे समान रूप से नियंत्रित किए जाते हैं।
इसके अतिरिक्त, मान केवल गैर-स्थैतिक डेटा हैं जो वर्ग उदाहरण के लिए दिए गए हैं, लेकिन वास्तविक संपत्ति को वर्ग को सौंपा गया है, जिसका अर्थ है कि जिन चीजों को आप दोहराना नहीं चाहते हैं, उन्हें दोहराए जाने की आवश्यकता नहीं है ... आपको डिफ़ॉल्ट मान प्रदान कर सकता है, इसलिए हर बार इसे प्राप्त करने वाले को इसकी आवश्यकता नहीं होती है, हालांकि डिफ़ॉल्ट डिफ़ॉल्ट मान को ओवरराइड करने का एक विकल्प होता है, और एक अन्य विकल्प होता है, इसलिए डिफ़ॉल्ट डिफ़ॉल्ट रिटर्न को ओवरराइड करके कच्चे संग्रहित मूल्य को वापस करता है (नोट: यह विधि इसका मतलब है कि कच्चे मूल्य को केवल तब सौंपा जाता है जब कोई मूल्य निर्धारित किया जाता है, अन्यथा यह कोई नहीं है - जब मूल्य रीसेट होता है, तो यह कोई नहीं देता है, आदि))
कई सहायक कार्य भी हैं - पहला गुण जो जोड़ा जाता है, उदाहरण मानों को संदर्भित करने के लिए वर्ग में 2 या इतने ही सहायक जोड़े जाते हैं ... वे ResetAccessors (_key, ..) वेरिएग दोहराए जाते हैं (सभी को पहले नाम वाले टीएस का उपयोग करके दोहराया जा सकता है ) और SetAccessors (_key, _value) को दक्षता में सहयोगी के रूप में मुख्य वर्ग में जोड़े जाने के विकल्प के साथ - जो योजना बनाई गई हैं: एक साथ समूह एक्सेसर्स का एक तरीका है, इसलिए यदि आप एक बार में कुछ रीसेट करते हैं, तो हर बार , आप उन्हें एक समूह को असाइन कर सकते हैं और हर बार नामित कुंजी को दोहराने के बजाय समूह को रीसेट कर सकते हैं, और बहुत कुछ।
उदाहरण / कच्चे संग्रहित मूल्य को कक्षा में संग्रहीत किया जाता है । , कक्षा। एक्सेसर क्लास को संदर्भित करता है जो संपत्ति के लिए स्थिर संस्करण / मान / फ़ंक्शन रखता है। _कक्षा। वह संपत्ति है जिसे सेटिंग / प्राप्त करने के दौरान इंस्टेंस क्लास के माध्यम से एक्सेस करने पर कहा जाता है।
Accessor _class .__ वर्ग को इंगित करता है, लेकिन क्योंकि यह आंतरिक है इसलिए इसे कक्षा में सौंपा जाना चाहिए, यही कारण है कि मैंने इसे असाइन करने के लिए __Name = AccessorFunc (...) का उपयोग करने का विकल्प चुना है, जो कई वैकल्पिक रूप से प्रति संपत्ति एक पंक्ति है। उपयोग करने के लिए तर्क (कुंजीकृत वैरग का उपयोग करना क्योंकि वे पहचानने और बनाए रखने के लिए आसान और अधिक कुशल हैं) ...
मैं बहुत सारे फ़ंक्शंस भी बनाता हूं, जैसा कि उल्लेख किया गया है, जिनमें से कुछ एक्सेसर फ़ंक्शन जानकारी का उपयोग करते हैं, इसलिए इसे कॉल करने की आवश्यकता नहीं है (क्योंकि यह इस समय थोड़ा असुविधाजनक है - अभी आपको _class का उपयोग करने की आवश्यकता है। (_class.instance) ) 'उदाहरण के लिए और स्वयं तक पहुंच बनाए रखने के लिए, AccessorFunc क्लास संदर्भ, और फ़ंक्शन परिभाषा के भीतर से अन्य जानकारी)।
यह बिल्कुल नहीं किया गया है, लेकिन यह एक शानदार फुट-होल्ड है। नोट: यदि आप गुण बनाने के लिए __Name = AccessorFunc (...) का उपयोग नहीं करते हैं, तो आपके पास __ कुंजी तक पहुंच नहीं होगी, भले ही मैं इसे init फ़ंक्शन के भीतर परिभाषित करता हूं। यदि आप करते हैं, तो कोई मुद्दे नहीं हैं।
इसके अलावा: ध्यान दें कि नाम और कुंजी अलग-अलग हैं ... नाम 'औपचारिक' है, जिसका उपयोग फ़ंक्शन नाम निर्माण में किया जाता है, और कुंजी डेटा संग्रहण और पहुंच के लिए है। यानी _class.x जहां लोअरकेस x कुंजी है, नाम अपरकेस एक्स होगा ताकि गेटएक्स () गेटेक्स () के बजाय फ़ंक्शन है जो थोड़ा विषम दिखता है। यह self.x को काम करने और उचित दिखने की अनुमति देता है, लेकिन GetX () और उचित देखने की भी अनुमति देता है।
मेरे पास एक उदाहरण वर्ग है जिसकी कुंजी / नाम समान है, और दिखाने के लिए अलग है। डेटा को आउटपुट करने के लिए बहुत सारे सहायक कार्य किए गए हैं (नोट: यह सब पूर्ण नहीं है) ताकि आप देख सकें कि क्या चल रहा है।
कुंजी का उपयोग करते हुए कार्यों की वर्तमान सूची: एक्स, नाम: एक्स आउटपुट के रूप में:
यह कोई व्यापक सूची नहीं है - कुछ ऐसे हैं जो पोस्टिंग के समय इस पर नहीं बने हैं ...
_instance.SetAccessors( _key, _value [ , _key, _value ] .. ) Instance Class Helper Function: Allows assigning many keys / values on a single line - useful for initial setup, or to minimize lines. In short: Calls this.Set<Name>( _value ) for each _key / _value pairing.
_instance.ResetAccessors( _key [ , _key ] .. ) Instance Class Helper Function: Allows resetting many key stored values to None on a single line. In short: Calls this.Reset<Name>() for each name provided.
Note: Functions below may list self.Get / Set / Name( _args ) - self is meant as the class instance reference in the cases below - coded as this in AccessorFuncBase Class.
this.GetX( _default_override = None, _ignore_defaults = False ) GET: Returns IF ISSET: STORED_VALUE .. IF IGNORE_DEFAULTS: None .. IF PROVIDED: DEFAULT_OVERRIDE ELSE: DEFAULT_VALUE 100
this.GetXRaw( ) RAW: Returns STORED_VALUE 100
this.IsXSet( ) ISSET: Returns ( STORED_VALUE != None ) True
this.GetXToString( ) GETSTR: Returns str( GET ) 100
this.GetXLen( _default_override = None, _ignore_defaults = False ) LEN: Returns len( GET ) 3
this.GetXLenToString( _default_override = None, _ignore_defaults = False ) LENSTR: Returns str( len( GET ) ) 3
this.GetXDefaultValue( ) DEFAULT: Returns DEFAULT_VALUE 1111
this.GetXAccessor( ) ACCESSOR: Returns ACCESSOR_REF ( self.__<key> ) [ AccessorFuncBase ] Key: x : Class ID: 2231452344344 : self ID: 2231448283848 Default: 1111 Allowed Types: {"<class 'int'>": "<class 'type'>", "<class 'float'>": "<class 'type'>"} Allowed Values: None
this.GetXAllowedTypes( ) ALLOWED_TYPES: Returns Allowed Data-Types {"<class 'int'>": "<class 'type'>", "<class 'float'>": "<class 'type'>"}
this.GetXAllowedValues( ) ALLOWED_VALUES: Returns Allowed Values None
this.GetXHelpers( ) HELPERS: Returns Helper Functions String List - ie what you're reading now... THESE ROWS OF TEXT
this.GetXKeyOutput( ) Returns information about this Name / Key ROWS OF TEXT
this.GetXGetterOutput( ) Returns information about this Name / Key ROWS OF TEXT
this.SetX( _value ) SET: STORED_VALUE Setter - ie Redirect to __<Key>.Set N / A
this.ResetX( ) RESET: Resets STORED_VALUE to None N / A
this.HasXGetterPrefix( ) Returns Whether or Not this key has a Getter Prefix... True
this.GetXGetterPrefix( ) Returns Getter Prefix... Get
this.GetXName( ) Returns Accessor Name - Typically Formal / Title-Case X
this.GetXKey( ) Returns Accessor Property Key - Typically Lower-Case x
this.GetXAccessorKey( ) Returns Accessor Key - This is to access internal functions, and static data... __x
this.GetXDataKey( ) Returns Accessor Data-Storage Key - This is the location where the class instance value is stored.. _x
कुछ डेटा आउटपुट है:
यह एक बिल्कुल नए वर्ग के लिए है, जिसका उपयोग डेमो क्लास के नाम के अलावा किसी भी डेटा को सौंपे बिना किया जाता है (इसलिए इसका आउटपुट हो सकता है) जो कि _foo है, जिस वैरिएबल नाम का मैंने उपयोग किया है ...
_foo --- MyClass: ---- id( this.__class__ ): 2231452349064 :::: id( this ): 2231448475016
Key Getter Value | Raw Key Raw / Stored Value | Get Default Value Default Value | Get Allowed Types Allowed Types | Get Allowed Values Allowed Values |
Name: _foo | _Name: _foo | __Name.DefaultValue( ): AccessorFuncDemoClass | __Name.GetAllowedTypes( ) <class 'str'> | __Name.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
x: 1111 | _x: None | __x.DefaultValue( ): 1111 | __x.GetAllowedTypes( ) (<class 'int'>, <class 'float'>) | __x.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
y: 2222 | _y: None | __y.DefaultValue( ): 2222 | __y.GetAllowedTypes( ) (<class 'int'>, <class 'float'>) | __y.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
z: 3333 | _z: None | __z.DefaultValue( ): 3333 | __z.GetAllowedTypes( ) (<class 'int'>, <class 'float'>) | __z.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
Blah: <class 'int'> | _Blah: None | __Blah.DefaultValue( ): <class 'int'> | __Blah.GetAllowedTypes( ) <class 'str'> | __Blah.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
Width: 1 | _Width: None | __Width.DefaultValue( ): 1 | __Width.GetAllowedTypes( ) (<class 'int'>, <class 'bool'>) | __Width.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
Height: 0 | _Height: None | __Height.DefaultValue( ): 0 | __Height.GetAllowedTypes( ) <class 'int'> | __Height.GetAllowedValues( ) (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) |
Depth: 2 | _Depth: None | __Depth.DefaultValue( ): 2 | __Depth.GetAllowedTypes( ) Saved Value Restricted to Authorized Values ONLY | __Depth.GetAllowedValues( ) (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) |
this.IsNameSet( ): True this.GetName( ): _foo this.GetNameRaw( ): _foo this.GetNameDefaultValue( ): AccessorFuncDemoClass this.GetNameLen( ): 4 this.HasNameGetterPrefix( ): <class 'str'> this.GetNameGetterPrefix( ): None
this.IsXSet( ): False this.GetX( ): 1111 this.GetXRaw( ): None this.GetXDefaultValue( ): 1111 this.GetXLen( ): 4 this.HasXGetterPrefix( ): (<class 'int'>, <class 'float'>) this.GetXGetterPrefix( ): None
this.IsYSet( ): False this.GetY( ): 2222 this.GetYRaw( ): None this.GetYDefaultValue( ): 2222 this.GetYLen( ): 4 this.HasYGetterPrefix( ): (<class 'int'>, <class 'float'>) this.GetYGetterPrefix( ): None
this.IsZSet( ): False this.GetZ( ): 3333 this.GetZRaw( ): None this.GetZDefaultValue( ): 3333 this.GetZLen( ): 4 this.HasZGetterPrefix( ): (<class 'int'>, <class 'float'>) this.GetZGetterPrefix( ): None
this.IsBlahSet( ): False this.GetBlah( ): <class 'int'> this.GetBlahRaw( ): None this.GetBlahDefaultValue( ): <class 'int'> this.GetBlahLen( ): 13 this.HasBlahGetterPrefix( ): <class 'str'> this.GetBlahGetterPrefix( ): None
this.IsWidthSet( ): False this.GetWidth( ): 1 this.GetWidthRaw( ): None this.GetWidthDefaultValue( ): 1 this.GetWidthLen( ): 1 this.HasWidthGetterPrefix( ): (<class 'int'>, <class 'bool'>) this.GetWidthGetterPrefix( ): None
this.IsDepthSet( ): False this.GetDepth( ): 2 this.GetDepthRaw( ): None this.GetDepthDefaultValue( ): 2 this.GetDepthLen( ): 1 this.HasDepthGetterPrefix( ): None this.GetDepthGetterPrefix( ): (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
this.IsHeightSet( ): False this.GetHeight( ): 0 this.GetHeightRaw( ): None this.GetHeightDefaultValue( ): 0 this.GetHeightLen( ): 1 this.HasHeightGetterPrefix( ): <class 'int'> this.GetHeightGetterPrefix( ): (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
और यह सभी _foo गुणों (नाम को छोड़कर) को उसी क्रम में निम्नलिखित मान निर्दिष्ट करने के बाद है: 'string', 1.0, True, 9, 10, False
this.IsNameSet( ): True this.GetName( ): _foo this.GetNameRaw( ): _foo this.GetNameDefaultValue( ): AccessorFuncDemoClass this.GetNameLen( ): 4 this.HasNameGetterPrefix( ): <class 'str'> this.GetNameGetterPrefix( ): None
this.IsXSet( ): True this.GetX( ): 10 this.GetXRaw( ): 10 this.GetXDefaultValue( ): 1111 this.GetXLen( ): 2 this.HasXGetterPrefix( ): (<class 'int'>, <class 'float'>) this.GetXGetterPrefix( ): None
this.IsYSet( ): True this.GetY( ): 10 this.GetYRaw( ): 10 this.GetYDefaultValue( ): 2222 this.GetYLen( ): 2 this.HasYGetterPrefix( ): (<class 'int'>, <class 'float'>) this.GetYGetterPrefix( ): None
this.IsZSet( ): True this.GetZ( ): 10 this.GetZRaw( ): 10 this.GetZDefaultValue( ): 3333 this.GetZLen( ): 2 this.HasZGetterPrefix( ): (<class 'int'>, <class 'float'>) this.GetZGetterPrefix( ): None
this.IsBlahSet( ): True this.GetBlah( ): string Blah this.GetBlahRaw( ): string Blah this.GetBlahDefaultValue( ): <class 'int'> this.GetBlahLen( ): 11 this.HasBlahGetterPrefix( ): <class 'str'> this.GetBlahGetterPrefix( ): None
this.IsWidthSet( ): True this.GetWidth( ): False this.GetWidthRaw( ): False this.GetWidthDefaultValue( ): 1 this.GetWidthLen( ): 5 this.HasWidthGetterPrefix( ): (<class 'int'>, <class 'bool'>) this.GetWidthGetterPrefix( ): None
this.IsDepthSet( ): True this.GetDepth( ): 9 this.GetDepthRaw( ): 9 this.GetDepthDefaultValue( ): 2 this.GetDepthLen( ): 1 this.HasDepthGetterPrefix( ): None this.GetDepthGetterPrefix( ): (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
this.IsHeightSet( ): True this.GetHeight( ): 9 this.GetHeightRaw( ): 9 this.GetHeightDefaultValue( ): 0 this.GetHeightLen( ): 1 this.HasHeightGetterPrefix( ): <class 'int'> this.GetHeightGetterPrefix( ): (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
_foo --- MyClass: ---- id( this.__class__ ): 2231452349064 :::: id( this ): 2231448475016
Key Getter Value | Raw Key Raw / Stored Value | Get Default Value Default Value | Get Allowed Types Allowed Types | Get Allowed Values Allowed Values |
Name: _foo | _Name: _foo | __Name.DefaultValue( ): AccessorFuncDemoClass | __Name.GetAllowedTypes( ) <class 'str'> | __Name.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
x: 10 | _x: 10 | __x.DefaultValue( ): 1111 | __x.GetAllowedTypes( ) (<class 'int'>, <class 'float'>) | __x.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
y: 10 | _y: 10 | __y.DefaultValue( ): 2222 | __y.GetAllowedTypes( ) (<class 'int'>, <class 'float'>) | __y.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
z: 10 | _z: 10 | __z.DefaultValue( ): 3333 | __z.GetAllowedTypes( ) (<class 'int'>, <class 'float'>) | __z.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
Blah: string Blah | _Blah: string Blah | __Blah.DefaultValue( ): <class 'int'> | __Blah.GetAllowedTypes( ) <class 'str'> | __Blah.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
Width: False | _Width: False | __Width.DefaultValue( ): 1 | __Width.GetAllowedTypes( ) (<class 'int'>, <class 'bool'>) | __Width.GetAllowedValues( ) Saved Value Restrictions Levied by Data-Type |
Height: 9 | _Height: 9 | __Height.DefaultValue( ): 0 | __Height.GetAllowedTypes( ) <class 'int'> | __Height.GetAllowedValues( ) (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) |
Depth: 9 | _Depth: 9 | __Depth.DefaultValue( ): 2 | __Depth.GetAllowedTypes( ) Saved Value Restricted to Authorized Values ONLY | __Depth.GetAllowedValues( ) (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) |
ध्यान दें कि प्रतिबंधित डेटा-प्रकार या मूल्य प्रतिबंधों के कारण, कुछ डेटा असाइन नहीं किया गया था - यह डिज़ाइन द्वारा है। सेटर खराब डेटा-प्रकार या मान को असाइन करने से रोकता है, यहां तक कि डिफ़ॉल्ट मान के रूप में असाइन किए जाने से भी (जब तक कि आप डिफ़ॉल्ट सुरक्षा सुरक्षा व्यवहार को ओवरराइड नहीं करते)
कोड यहाँ पोस्ट नहीं किया गया है क्योंकि उदाहरण और स्पष्टीकरण के बाद मेरे पास कमरा नहीं था ... इसके अलावा क्योंकि यह बदल जाएगा।
कृपया ध्यान दें: इस पोस्टिंग के समय, फ़ाइल गड़बड़ है - यह बदल जाएगा। लेकिन, यदि आप इसे उदात्त पाठ में चलाते हैं और इसे संकलित करते हैं, या इसे पायथन से चलाते हैं, तो यह एक टन सूचना को संकलित और थूक देगा - AccessorDB भाग नहीं किया गया है (जिसका उपयोग प्रिंट गेटर्स और GetKeyOutput सहायक को अद्यतन करने के लिए किया जाएगा। एक समारोह में परिवर्तित होने के साथ-साथ कार्य, शायद एक ही समारोह में डाल दिया और नाम बदल दिया - इसके लिए देखो ..)
अगला: इसे चलाने के लिए सब कुछ आवश्यक नहीं है - नीचे टिप्पणी की गई बहुत सारी सामग्री डीबगिंग के लिए उपयोग की जाने वाली अधिक जानकारी के लिए है - जब आप इसे डाउनलोड करते हैं तो यह वहां नहीं हो सकता है। यदि यह है, तो आपको अधिक जानकारी प्राप्त करने के लिए असुविधाजनक और recompile करने में सक्षम होना चाहिए।
मैं MyClassBase की आवश्यकता के लिए एक काम के आसपास देख रहा हूँ: पास, MyClass (MyClassBase): ... - यदि आप एक समाधान के बारे में जानते हैं - इसे पोस्ट करें।
कक्षा में आवश्यक एकमात्र चीज __ लाइनें हैं - स्ट्रेट डिबगिंग के लिए है जैसा कि init है - उन्हें डेमो क्लास से हटाया जा सकता है, लेकिन आपको नीचे कुछ लाइनों को हटाने या टिप्पणी करने की आवश्यकता होगी (_foo / 2/3) ) ..
शीर्ष पर द स्ट्रिंग, डिक्ट और यूटील कक्षाएं मेरी पायथन लाइब्रेरी का एक हिस्सा हैं - वे पूर्ण नहीं हैं। मैंने लाइब्रेरी से अपनी ज़रूरत की कुछ चीजों की नकल की, और मैंने कुछ नए बनाए। पूर्ण कोड पूरी लाइब्रेरी से लिंक होगा और इसमें अपडेटेड कॉल प्रदान करने और कोड हटाने के साथ-साथ इसमें शामिल होगा (वास्तव में, केवल एक ही कोड डेमो क्लास और प्रिंट स्टेटमेंट होगा - AccessorFunc सिस्टम को लाइब्रेरी में स्थानांतरित कर दिया जाएगा)। ..
फ़ाइल का हिस्सा:
##
## MyClass Test AccessorFunc Implementation for Dynamic 1-line Parameters
##
class AccessorFuncDemoClassBase( ):
pass
class AccessorFuncDemoClass( AccessorFuncDemoClassBase ):
__Name = AccessorFuncBase( parent = AccessorFuncDemoClassBase, name = 'Name', default = 'AccessorFuncDemoClass', allowed_types = ( TYPE_STRING ), allowed_values = VALUE_ANY, documentation = 'Name Docs', getter_prefix = 'Get', key = 'Name', allow_erroneous_default = False, options = { } )
__x = AccessorFuncBase( parent = AccessorFuncDemoClassBase, name = 'X', default = 1111, allowed_types = ( TYPE_INTEGER, TYPE_FLOAT ), allowed_values = VALUE_ANY, documentation = 'X Docs', getter_prefix = 'Get', key = 'x', allow_erroneous_default = False, options = { } )
__Height = AccessorFuncBase( parent = AccessorFuncDemoClassBase, name = 'Height', default = 0, allowed_types = TYPE_INTEGER, allowed_values = VALUE_SINGLE_DIGITS, documentation = 'Height Docs', getter_prefix = 'Get', key = 'Height', allow_erroneous_default = False, options = { } )
यह सौंदर्य AccessorFuncs / callbacks / data-type / व्यावसायिक प्रवर्तन, आदि के साथ गतिशील रूप से जोड़े गए गुणों के साथ नई कक्षाएं बनाने के लिए अविश्वसनीय रूप से आसान बनाता है।
अभी के लिए, यह लिंक है (यह लिंक दस्तावेज़ में परिवर्तनों को प्रतिबिंबित करना चाहिए।): https://www.dropbox.com/s/6gzi44i7dh58v61/dynamic_properties_accessorfuncs_and_more.py?topl=0
इसके अलावा: यदि आप उदात्त पाठ का उपयोग नहीं करते हैं, तो मैं इसे नोटपैड ++, एटम, विज़ुअल कोड, और अन्य की सलाह देता हूं क्योंकि उचित थ्रेडिंग कार्यान्वयन के कारण यह बहुत अधिक तेजी से उपयोग कर रहा है ... मैं एक आईडीई जैसे कोड पर भी काम कर रहा हूं। इसके लिए मैपिंग सिस्टम - एक नज़र डालें: https://bitbucket.org/Acecool/acecoolcodemappingsystem/src/master/ (पहले पैकेज मैनेजर में रेपो जोड़ें, फिर प्लगिन स्थापित करें - जब संस्करण 1.0.0 तैयार है, तो मैं जोड़ूंगा यह मुख्य प्लगइन सूची में है ...)
मुझे उम्मीद है कि यह समाधान मदद करता है ... और, हमेशा की तरह:
सिर्फ इसलिए कि यह काम करता है, इसे सही नहीं बनाता है - जोश 'Acecool' मोजर
:
और__init__
संदर्भ की आवश्यकता हैself.fn_readyonly
।