คำถามติดแท็ก class-design

18
ทำไม __init __ () ถูกเรียกหลังจาก __new __ () เสมอ?
ฉันแค่พยายามที่จะปรับปรุงการหนึ่งในชั้นเรียนของฉันและได้แนะนำฟังก์ชันการทำงานบางอย่างในรูปแบบเดียวกับรูปแบบการออกแบบฟลายเวท แต่ฉันบิตสับสนว่าทำไมถึงอยู่เสมอเรียกว่าหลังจาก__init__ __new__ฉันไม่ได้คาดหวังสิ่งนี้ ทุกคนสามารถบอกฉันได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นและฉันจะใช้ฟังก์ชันนี้ได้อย่างไร? (นอกเหนือจากการนำการติดตั้งไปใช้__new__ซึ่งรู้สึกแฮ็คค่อนข้างมาก) นี่คือตัวอย่าง: class A(object): _dict = dict() def __new__(cls): if 'key' in A._dict: print "EXISTS" return A._dict['key'] else: print "NEW" return super(A, cls).__new__(cls) def __init__(self): print "INIT" A._dict['key'] = self print "" a1 = A() a2 = A() a3 = A() ขาออก: NEW INIT EXISTS INIT …

23
คุณออกแบบโครงการเชิงวัตถุได้อย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันกำลังทำงานในโครงการขนาดใหญ่ (สำหรับฉัน) ซึ่งจะมีหลายชั้นเรียนและจะต้องขยายออกไป แต่ฉันไม่แน่ใจว่าจะวางแผนโปรแกรมของฉันอย่างไรและวิธีที่ชั้นเรียนต้องมีปฏิสัมพันธ์ ฉันเรียนหลักสูตร OOD สองสามภาคเรียนและเรียนรู้มากมายจากหลักสูตรนั้น เช่นการเขียน UML และแปลเอกสารข้อกำหนดเป็นวัตถุและคลาส เราเรียนรู้แผนภาพลำดับด้วยเช่นกัน แต่อย่างใดฉันพลาดการบรรยายหรือบางอย่างพวกเขาไม่ยึดติดกับฉัน กับโครงการก่อนหน้านี้ฉันได้ลองใช้วิธีการที่ฉันเรียนรู้จากหลักสูตร แต่มักจะจบลงด้วยรหัสที่ทันทีที่ฉันสามารถพูดว่า "ใช่ที่ดูเหมือนสิ่งที่ฉันมีในใจ" ฉันไม่มีความปรารถนาที่จะขุดผ่านโคลนเพื่อเพิ่ม คุณสมบัติใหม่ ฉันได้รับสำเนาสมบูรณ์ของรหัสสตีฟ McConnell ซึ่งฉันได้ยินอย่างต่อเนื่องเป็นที่น่าอัศจรรย์ที่นี่และที่อื่น ๆ ฉันอ่านบทเกี่ยวกับการออกแบบและดูเหมือนจะไม่เปิดเผยข้อมูลที่ฉันต้องการ ฉันรู้ว่าเขาบอกว่ามันไม่ได้เป็นกระบวนการที่แห้งและแห้งซึ่งส่วนใหญ่มาจากการวิเคราะห์พฤติกรรม แต่ฉันไม่สามารถรับข้อมูลทั้งหมดของเขาและนำไปใช้กับโครงการของฉันได้ ดังนั้นสิ่งที่เป็นสิ่งที่คุณทำในช่วงการออกแบบระดับสูง (ก่อนที่คุณจะเริ่มต้นการเขียนโปรแกรม) เพื่อตรวจสอบสิ่งที่เป็นชั้นเรียนที่คุณจำเป็นต้อง (โดยเฉพาะคนที่ไม่ได้ขึ้นอยู่ที่ใด 'วัตถุโลกแห่งความจริง') และวิธีการที่พวกเขาจะโต้ตอบกับแต่ละอื่น ๆ ? โดยเฉพาะฉันสนใจวิธีการที่คุณใช้? อะไรคือกระบวนการที่คุณทำตามซึ่งโดยปกติแล้วการออกแบบที่ดีและสะอาดซึ่งจะนำเสนอผลิตภัณฑ์ขั้นสุดท้ายอย่างใกล้ชิด?

24
ฉันจะรู้ได้อย่างไรว่าจะสร้างอินเทอร์เฟซเมื่อใด
ฉันอยู่ในช่วงของการเรียนรู้การพัฒนาที่ฉันรู้สึกว่าฉันต้องเรียนรู้เพิ่มเติมเกี่ยวกับอินเทอร์เฟซ ฉันอ่านบ่อยเกี่ยวกับพวกเขา แต่ดูเหมือนว่าฉันไม่สามารถเข้าใจพวกเขาได้ ฉันได้อ่านตัวอย่างเช่น: คลาสสัตว์พื้นฐานพร้อมอินเทอร์เฟซ IAnimal สำหรับสิ่งต่าง ๆ เช่น 'Walk', 'Run', 'GetLegs' ฯลฯ - แต่ฉันไม่เคยทำงานอะไรมาแล้วรู้สึกเหมือน "เฮ้ฉันควรใช้อินเทอร์เฟซ นี่!" ฉันกำลังคิดถึงอะไร ทำไมมันเป็นแนวคิดที่ยากสำหรับฉันที่จะเข้าใจ! ฉันถูกข่มขู่ด้วยความจริงที่ว่าฉันอาจไม่เคยตระหนักถึงความต้องการที่เป็นรูปธรรมสำหรับคนส่วนใหญ่เนื่องจากความเข้าใจที่ขาดหายไปบางประการ! มันทำให้ฉันรู้สึกเหมือนว่าฉันขาดอะไรบางอย่างในแง่ของการเป็นนักพัฒนา! หากใครมีประสบการณ์เช่นนี้และมีความก้าวหน้าฉันจะขอบคุณเคล็ดลับในการทำความเข้าใจแนวคิดนี้ ขอบคุณ.


6
ฉันจะออกแบบคลาสใน Python ได้อย่างไร
ฉันมีความช่วยเหลือที่ยอดเยี่ยมสำหรับคำถามก่อนหน้านี้ของฉันในการตรวจจับอุ้งเท้าและนิ้วเท้าภายในอุ้งเท้าแต่วิธีแก้ปัญหาทั้งหมดเหล่านี้ใช้ได้กับการวัดครั้งละครั้งเท่านั้น ตอนนี้ฉันมีข้อมูลที่ประกอบด้วย: ประมาณ 30 ตัว; แต่ละคนมี 24 วัด (แบ่งออกเป็นหลายกลุ่มย่อย); การวัดแต่ละครั้งมีอย่างน้อย 4 หน้าสัมผัส (หนึ่งอันสำหรับแต่ละอุ้งเท้า) และ การติดต่อแต่ละครั้งจะถูกแบ่งออกเป็น 5 ส่วนและ มีพารามิเตอร์หลายอย่างเช่นเวลาติดต่อสถานที่แรงทั้งหมดเป็นต้น เห็นได้ชัดว่าการรวมทุกอย่างไว้ในวัตถุขนาดใหญ่ชิ้นเดียวจะไม่ตัดมันดังนั้นฉันจึงคิดว่าฉันต้องใช้คลาสแทนฟังก์ชั่นการฆ่าในปัจจุบัน แต่ถึงแม้ว่าฉันจะอ่านบทการเรียนรู้ของงูหลามเกี่ยวกับชั้นเรียนฉันไม่สามารถนำไปใช้กับโค้ดของตัวเอง ( ลิงค์ GitHub ) ฉันรู้สึกเหมือนมันค่อนข้างแปลกที่จะประมวลผลข้อมูลทุกครั้งที่ฉันต้องการได้รับข้อมูลบางอย่าง เมื่อฉันรู้ตำแหน่งของอุ้งเท้าแต่ละตัวแล้วฉันก็ไม่มีเหตุผลที่จะคำนวณสิ่งนี้อีก นอกจากนี้ฉันต้องการเปรียบเทียบอุ้งเท้าทั้งหมดของสุนัขตัวเดียวกันเพื่อกำหนดว่าผู้ติดต่อรายใดที่เป็นของอุ้งเท้าหน้า (หน้า / หลังหลังซ้าย / ขวา) สิ่งนี้จะกลายเป็นความยุ่งเหยิงถ้าฉันยังคงใช้ฟังก์ชั่นเท่านั้น ดังนั้นตอนนี้ฉันกำลังมองหาคำแนะนำเกี่ยวกับวิธีการสร้างคลาสที่จะให้ฉันประมวลผลข้อมูลของฉัน ( ลิงก์ไปยังข้อมูลซิปของสุนัขตัวหนึ่ง ) อย่างสมเหตุสมผล
143 python  oop  class-design 

30
UML ใช้ได้จริงหรือไม่? [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ในวิทยาลัยฉันมีหลักสูตรที่เน้นการออกแบบและUMLมากมายและฉันตระหนักดีว่า UML สามารถใช้เพื่อประโยชน์ของโครงการซอฟต์แวร์โดยเฉพาะการทำแผนที่กรณีใช้งานได้แต่มันใช้ได้จริงหรือไม่? ฉันได้ทำเงื่อนไขการทำงานแบบ Co-op ไปบ้างแล้วและดูเหมือนว่า UML จะไม่ถูกใช้อย่างหนักในอุตสาหกรรมนี้ คุ้มค่ากับเวลาระหว่างโครงการสร้างไดอะแกรม UML หรือไม่? นอกจากนี้ฉันพบว่าคลาสไดอะแกรมโดยทั่วไปไม่มีประโยชน์เพราะการดูไฟล์ส่วนหัวของคลาสนั้นเร็วกว่า ไดอะแกรมใดมีประโยชน์มากที่สุด แก้ไข:ประสบการณ์ของฉันถูก จำกัด ไว้ที่โครงการขนาดเล็กภายใต้ 10 โครงการสำหรับนักพัฒนา แก้ไข:คำตอบที่ดีมากมายและแม้ว่าจะไม่ใช่คำที่ละเอียดที่สุด แต่ฉันเชื่อว่าคำตอบที่เลือกนั้นสมดุลที่สุด

10
แนวทางปฏิบัติที่ดีที่สุด: การสั่งซื้อสาธารณะ / ป้องกัน / ส่วนตัวภายในนิยามคลาส?
ฉันกำลังเริ่มโครงการใหม่ตั้งแต่ต้นและต้องการให้มันสะอาด / มีมาตรฐานการเข้ารหัสที่ดี นักพัฒนาที่ช่ำชองที่นี่ชอบจัดวางสิ่งต่างๆภายในชั้นเรียนในลำดับใด ตอบ: 1) วิธีการสาธารณะ 2) วิธีการส่วนตัว 3) ตัวแทนสาธารณะ 4) ตัวแทนส่วนตัว B: 1) ตัวแทนสาธารณะ 2) ตัวแทนส่วนตัว 3) วิธีการสาธารณะ 4) วิธีการส่วนตัว C: 1) public vars 2) public method 3) private method 4) private vars โดยทั่วไปฉันชอบใส่ vars คงที่สาธารณะไว้ด้านบน แต่ถ้าอย่างนั้นวิธีการแบบคงที่สาธารณะจะแสดงอยู่ข้างหน้าตัวสร้างของคุณหรือตัวสร้างควรอยู่ในรายการก่อนเสมอ? แบบนั้น ... ฉันรู้ว่ามันฟิน แต่ฉันแค่สงสัย: แนวทางปฏิบัติที่ดีที่สุดสำหรับสิ่งนี้คืออะไร? PS: ไม่ฉันไม่ใช้ Cc # ฉันรู้ว่า. ฉันเป็น …


10
ฉันจะเปลี่ยนชื่อคลาสใน C # โดยไม่ต้องเพิ่มบรรทัดของโค้ดให้กับทุกไฟล์ที่ใช้คลาสได้อย่างไร
ฉันต้องการสร้างนามแฝงสำหรับชื่อคลาส ไวยากรณ์ต่อไปนี้จะสมบูรณ์แบบ: public class LongClassNameOrOneThatContainsVersionsOrDomainSpecificName { ... } public class MyName = LongClassNameOrOneThatContainsVersionOrDomainSpecificName; แต่จะไม่รวบรวม ตัวอย่าง หมายเหตุตัวอย่างนี้จัดทำขึ้นเพื่อความสะดวกเท่านั้น อย่าพยายามแก้ปัญหานี้โดยแนะนำให้เปลี่ยนการออกแบบของระบบทั้งหมด การมีอยู่หรือขาดหายไปของตัวอย่างนี้ไม่ได้ทำให้คำถามเดิมเปลี่ยนไป รหัสที่มีอยู่บางส่วนขึ้นอยู่กับการมีอยู่ของคลาสคงที่: public static class ColorScheme { ... } โทนสีนี้เป็นโทนสีของ Outlook 2003 ฉันต้องการแนะนำโครงร่างสีของ Outlook 2007 ในขณะที่ยังคงรักษารูปแบบสีของ Outlook 2003 ไว้: public static class Outlook2003ColorScheme { ... } public static class Outlook2007ColorScheme { ... } …
88 c#  class-design 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.