คำตอบที่ให้มาจำนวนมากต้องการบรรทัดจำนวนมากต่อหนึ่งคุณสมบัติเช่น / และ / หรือ - สิ่งที่ฉันพิจารณาการใช้งานที่น่าเกลียดหรือน่าเบื่อเพราะการทำซ้ำที่จำเป็นสำหรับคุณสมบัติหลาย ๆ แบบ ฯลฯ ฉันชอบที่จะทำให้สิ่งต่าง ๆ เดือดลง ไม่สามารถทำให้ง่ายขึ้นได้อีกต่อไปหรือจนกว่ามันจะไม่ได้มีจุดประสงค์มากมายในการทำเช่นนั้น
กล่าวโดยย่อ: ในงานที่เสร็จสมบูรณ์ถ้าฉันทำซ้ำรหัส 2 บรรทัดฉันมักจะแปลงเป็นฟังก์ชันตัวช่วยบรรทัดเดียวและอื่น ๆ ... ฉันลดความซับซ้อนของคณิตศาสตร์หรือข้อโต้แย้งแปลก ๆ เช่น (start_x, start_y, end_x, end_y) เป็น (x, y, w, h) เช่น x, y, x + w, y + h (บางครั้งต้องการ min / max หรือถ้า w / h เป็นค่าลบและการนำไปใช้ไม่ชอบมันฉันจะลบจาก x / y และ abs w / h. ฯลฯ .. )
การเอาชนะ getters / setters ภายในเป็นวิธีที่ดีที่จะไป แต่ปัญหาคือคุณต้องทำเช่นนั้นสำหรับทุกชั้นเรียนหรือผู้ปกครองชั้นเรียนไปยังฐานนั้น ... มันไม่ได้ผลสำหรับฉันอย่างที่ฉันอยากจะเป็น อิสระในการเลือกเด็ก / ผู้ปกครองสำหรับการสืบทอดโหนดลูก ฯลฯ
ฉันได้สร้างโซลูชันที่ตอบคำถามโดยไม่ใช้ Dict data-type เพื่อให้ข้อมูลเพราะฉันพบว่ามันน่าเบื่อที่จะป้อนข้อมูล ฯลฯ ...
โซลูชันของฉันต้องการให้คุณเพิ่ม 2 บรรทัดพิเศษเหนือคลาสของคุณเพื่อสร้างคลาสพื้นฐานสำหรับคลาสที่คุณต้องการเพิ่มคุณสมบัติไปแล้ว 1 บรรทัดต่อและคุณมีตัวเลือกในการเพิ่มการโทรกลับเพื่อควบคุมข้อมูลแจ้งให้คุณทราบเมื่อมีการเปลี่ยนแปลงข้อมูล จำกัด ข้อมูลที่สามารถตั้งค่าตามค่าและ / หรือประเภทข้อมูลและอื่น ๆ อีกมากมาย
คุณยังมีตัวเลือกในการใช้ _object.x, _object.x = value, _object.GetX (), _object.SetX (ค่า) และพวกเขาจะได้รับการจัดการอย่างเท่าเทียมกัน
นอกจากนี้ค่าเป็นข้อมูลไม่คงที่เท่านั้นที่ถูกกำหนดให้กับอินสแตนซ์ของคลาส แต่คุณสมบัติจริงถูกกำหนดให้กับคลาสหมายถึงสิ่งที่คุณไม่ต้องการทำซ้ำไม่จำเป็นต้องทำซ้ำ ... คุณ สามารถกำหนดค่าเริ่มต้นเพื่อให้ผู้ใช้ไม่จำเป็นต้องใช้มันในแต่ละครั้งแม้ว่าจะมีตัวเลือกในการแทนที่ค่าเริ่มต้นและมีตัวเลือกอื่นเพื่อให้ผู้ส่งกลับได้รับผลตอบแทนที่เก็บไว้โดยการคืนค่าเริ่มต้น (หมายเหตุ: วิธีนี้ หมายถึงมูลค่าดิบจะถูกกำหนดเฉพาะเมื่อมีการกำหนดค่ามิฉะนั้นจะเป็นไม่มี - เมื่อค่าถูกรีเซ็ตแล้วจะกำหนดให้ไม่มี ฯลฯ )
มีฟังก์ชั่นตัวช่วยมากมายเช่นกัน - คุณสมบัติแรกที่เพิ่มเข้ามาจะเพิ่มผู้ช่วย 2 คนเพื่ออ้างอิงค่าอินสแตนซ์ ... พวกเขาคือ ResetAccessors (_key, .. ) varargs ซ้ำ (ทั้งหมดสามารถทำซ้ำได้โดยใช้ args ชื่อแรก ) และ SetAccessors (_key, _value) พร้อมตัวเลือกที่เพิ่มเข้ามาในคลาสหลักเพื่อช่วยในการเพิ่มประสิทธิภาพ - สิ่งที่วางแผนไว้คือ: วิธีการรวมกลุ่ม accessors เข้าด้วยกันดังนั้นหากคุณมักจะรีเซ็ตทีละครั้งทุกครั้ง คุณสามารถกำหนดให้กับกลุ่มและรีเซ็ตกลุ่มแทนการทำซ้ำคีย์ที่ตั้งชื่อในแต่ละครั้งและอีกมากมาย
ค่าที่เก็บไว้ของอินสแตนซ์ / ดิบถูกเก็บไว้ที่คลาส, ห้องเรียน. อ้างอิง Accessor Class ซึ่งเก็บ vars / values / function แบบคงที่สำหรับคุณสมบัติ _class เป็นคุณสมบัติที่เรียกว่าเมื่อเข้าถึงผ่านคลาสอินสแตนซ์ระหว่างการตั้งค่า / การรับเป็นต้น
Accessor _class .__ ชี้ไปที่คลาส แต่เนื่องจากภายในจะต้องมีการกำหนดในคลาสซึ่งเป็นสาเหตุที่ฉันเลือกที่จะใช้ __Name = AccessorFunc (... ) เพื่อกำหนดมันบรรทัดเดียวต่อคุณสมบัติที่มีตัวเลือกมากมาย ข้อโต้แย้งที่จะใช้ (ใช้ varargs ที่สำคัญเนื่องจากง่ายและมีประสิทธิภาพมากกว่าในการระบุและดูแล)
ฉันยังสร้างฟังก์ชั่นจำนวนมากตามที่กล่าวไว้บางส่วนใช้ข้อมูลฟังก์ชั่นการเข้าถึงดังนั้นจึงไม่จำเป็นต้องถูกเรียก (เพราะมันค่อนข้างไม่สะดวกในขณะนี้ - ตอนนี้คุณต้องใช้ _class. .FunctionName (_class_instance) , args) - ฉันได้ใช้สแต็ค / ติดตามเพื่อคว้าการอ้างอิงอินสแตนซ์เพื่อคว้าค่าโดยการเพิ่มฟังก์ชั่นที่เรียกใช้บิตมาราธอนนี้หรือโดยการเพิ่ม accessors ไปยังวัตถุและใช้ตัวเอง สำหรับอินสแตนซ์และเพื่อรักษาการเข้าถึงตนเองการอ้างอิงคลาส AccessorFunc และข้อมูลอื่น ๆ จากภายในนิยามฟังก์ชัน)
มันไม่ได้ทำค่อนข้าง แต่มันถือเท้าที่ยอดเยี่ยม หมายเหตุ: หากคุณไม่ได้ใช้ __Name = AccessorFunc (... ) เพื่อสร้างคุณสมบัติคุณจะไม่สามารถเข้าถึงคีย์ __ แม้ว่าฉันจะกำหนดภายในฟังก์ชัน init ถ้าคุณทำแล้วไม่มีปัญหา
นอกจากนี้โปรดทราบว่าชื่อและคีย์นั้นแตกต่างกัน ... ชื่อคือ 'เป็นทางการ' ซึ่งใช้ในการสร้างชื่อฟังก์ชั่นและที่สำคัญคือสำหรับการจัดเก็บข้อมูลและการเข้าถึง ie _class.x โดยที่ตัวพิมพ์เล็ก x เป็นคีย์ชื่อจะเป็นตัวพิมพ์ใหญ่ X ดังนั้น GetX () เป็นฟังก์ชันแทนที่จะเป็น Getx () ซึ่งดูแปลก ๆ เล็กน้อย สิ่งนี้ทำให้ self.x ทำงานและดูเหมาะสม แต่ยังอนุญาตให้ GetX () และดูเหมาะสม
ฉันมีคลาสตัวอย่างตั้งค่าด้วยคีย์ / ชื่อเหมือนกันและแตกต่างกันเพื่อแสดง ฟังก์ชั่นตัวช่วยมากมายที่สร้างขึ้นเพื่อส่งออกข้อมูล (หมายเหตุ: ไม่ใช่ทั้งหมดนี้เสร็จสมบูรณ์แล้ว) เพื่อให้คุณสามารถเห็นสิ่งที่เกิดขึ้น
รายการฟังก์ชั่นปัจจุบันโดยใช้คีย์: x, ชื่อ: X เอาต์พุตเป็น:
นี่ไม่ใช่รายการที่ครอบคลุม - มีบางอย่างที่ยังไม่ได้ทำในตอนที่โพสต์ ...
_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) |
โปรดทราบว่าเนื่องจากข้อ จำกัด ชนิดข้อมูลหรือค่า จำกัด ข้อมูลบางอย่างไม่ได้ถูกกำหนด - นี่คือโดยการออกแบบ setter ห้ามมิให้กำหนดชนิดข้อมูลหรือค่าที่ไม่ถูกต้องแม้จะถูกกำหนดเป็นค่าเริ่มต้น (เว้นแต่คุณจะแทนที่พฤติกรรมการป้องกันค่าเริ่มต้น)
รหัสไม่ได้ถูกโพสต์ที่นี่เพราะฉันไม่มีห้องว่างหลังจากตัวอย่างและคำอธิบาย ... และยังเพราะมันจะเปลี่ยน
โปรดทราบ: ในขณะที่ทำการโพสต์นี้ไฟล์นั้นยุ่ง - สิ่งนี้จะเปลี่ยนไป แต่ถ้าคุณเรียกใช้ใน Sublime Text และคอมไพล์หรือเรียกใช้จาก Python มันจะรวบรวมและคายข้อมูลออกมามากมาย - ส่วน AccessorDB ไม่เสร็จสมบูรณ์ (ซึ่งจะใช้ในการอัพเดท Print Getters และ GetKeyOutput helper ฟังก์ชั่นพร้อมกับการเปลี่ยนเป็นฟังก์ชั่นอินสแตนซ์อาจใส่ในฟังก์ชั่นเดียวและเปลี่ยนชื่อ - มองหา .. )
ถัดไป: ไม่จำเป็นต้องใช้ทุกสิ่งเพื่อให้ทำงานได้มากสิ่งที่ใส่ความคิดเห็นไว้ด้านล่างมีไว้สำหรับข้อมูลเพิ่มเติมที่ใช้สำหรับการดีบัก - อาจไม่ได้อยู่ที่นั่นเมื่อคุณดาวน์โหลด หากเป็นเช่นนั้นคุณควรสามารถยกเลิกการคอมเม้นต์และคอมไพล์ใหม่เพื่อรับข้อมูลเพิ่มเติม
ฉันกำลังมองหาวิธีแก้ไขเพื่อต้องการ MyClassBase: pass, MyClass (MyClassBase): ... - ถ้าคุณรู้วิธีแก้ปัญหา - โพสต์ไว้
สิ่งเดียวที่จำเป็นในชั้นเรียนคือ __ บรรทัด - str ใช้สำหรับการดีบั๊กเช่นเดียวกับinit - สามารถลบออกจาก Demo Class ได้ แต่คุณจะต้องแสดงความคิดเห็นหรือลบบรรทัดด้านล่าง (_foo / 2/3) ) ..
คลาส String, Dict และ Util ที่ด้านบนเป็นส่วนหนึ่งของ Python library ของฉัน - มันยังไม่เสร็จสมบูรณ์ ฉันคัดลอกบางสิ่งที่ฉันต้องการจากห้องสมุดและฉันสร้างสิ่งใหม่สองสามอย่าง รหัสเต็มจะเชื่อมโยงไปยังห้องสมุดที่สมบูรณ์และจะรวมกับการโทรที่มีการปรับปรุงและลบรหัส (อันที่จริงรหัสเดียวที่เหลือจะเป็นคลาสการสาธิตและคำสั่งการพิมพ์ - ระบบ 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 / value เป็นต้น
สำหรับตอนนี้ลิงก์อยู่ที่ (ลิงก์นี้ควรแสดงถึงการเปลี่ยนแปลงในเอกสาร): https://www.dropbox.com/s/6gzi44i7dh58v61/dynamic_properties_accessorfuncs_and_more.py?dl=0
นอกจากนี้: หากคุณไม่ได้ใช้ Sublime Text ฉันขอแนะนำให้ใช้มากกว่า Notepad ++, Atom, Visual Code และอื่น ๆ เพราะการใช้เธรดที่เหมาะสมทำให้ใช้งานได้เร็วขึ้นมาก ... ฉันกำลังใช้โค้ด IDE เหมือนกัน ระบบการทำแผนที่ - ลองดูที่: https://bitbucket.org/Acecool/acecoolcodemappingsystem/src/master/ (เพิ่ม Repo ใน Package Manager ก่อนจากนั้นติดตั้งปลั๊กอิน - เมื่อเวอร์ชัน 1.0.0 พร้อมฉันจะเพิ่ม ไปยังรายการปลั๊กอินหลัก ... )
ฉันหวังว่าโซลูชันนี้จะช่วย ... และเช่นเคย:
เพียงเพราะมันใช้งานได้ไม่ถูกต้อง - โมเซอร์ Josh 'Acecool'
:
และการอ้างอิง__init__
self.fn_readyonly