ฉันกำลังมองหาแหล่งข้อมูลใด ๆ ที่ให้ตัวอย่างของวิธีปฏิบัติที่ดีที่สุดรูปแบบการออกแบบและหลักการ SOLID โดยใช้ Python
ฉันกำลังมองหาแหล่งข้อมูลใด ๆ ที่ให้ตัวอย่างของวิธีปฏิบัติที่ดีที่สุดรูปแบบการออกแบบและหลักการ SOLID โดยใช้ Python
คำตอบ:
บางส่วนทับซ้อนกันในสิ่งเหล่านี้
ช่างไม้ซอฟต์แวร์ระดับกลางและระดับสูงใน Python
รหัสเหมือน Pythonista: Idiomatic Python
Google Developers Day US - รูปแบบการออกแบบของ Python
ทรัพยากรก็คือโดยตัวอย่างที่หลามสูตร ตัวเลขที่ดีไม่เป็นไปตามแนวปฏิบัติที่ดีที่สุด แต่คุณสามารถหารูปแบบบางอย่างที่มีประโยชน์ได้
ชนิด
>>> import this
ในคอนโซล Python
แม้ว่าโดยปกติแล้วจะถือว่าเป็นเรื่องตลก (ดี!) แต่ก็มีความจริงที่เฉพาะเจาะจงของงูหลาม
" ความคิดใน Python " ของ Bruce Eckel นั้นเน้นหนักในเรื่องของลวดลายการออกแบบ
คุณสามารถเริ่มต้นที่นี่และที่นี่
หากต้องการข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับ pattners การออกแบบคุณควรดูที่Design Patterns: องค์ประกอบของซอฟต์แวร์เชิงวัตถุที่นำกลับมาใช้ซ้ำได้ ซอร์สโค้ดไม่ได้อยู่ใน Python แต่ไม่จำเป็นต้องให้คุณเข้าใจรูปแบบ
บางสิ่งที่คุณสามารถใช้เพื่อทำให้โค้ดของคุณง่ายขึ้นเมื่อเรียกใช้แอตทริบิวต์บนวัตถุที่อาจมีหรือไม่มีอยู่คือใช้รูปแบบการออกแบบวัตถุ Null (ซึ่งฉันได้รับการแนะนำในPython Cookbook )
โดยประมาณเป้าหมายกับวัตถุ Null คือการให้การแทนที่ 'อัจฉริยะ' สำหรับชนิดข้อมูลดั้งเดิมที่มักใช้ไม่มีใน Python หรือ Null (หรือตัวชี้ Null) ในภาษาอื่น สิ่งเหล่านี้ถูกใช้เพื่อจุดประสงค์หลายอย่างรวมถึงกรณีที่สำคัญซึ่งสมาชิกหนึ่งคนขององค์ประกอบบางอย่างที่คล้ายคลึงกันนั้นมีความพิเศษไม่ว่าด้วยเหตุผลใดก็ตาม ส่วนใหญ่มักจะส่งผลให้งบที่มีเงื่อนไขเพื่อแยกความแตกต่างระหว่างองค์ประกอบสามัญและค่า Null ดั้งเดิม
วัตถุนี้กินข้อผิดพลาดของคุณลักษณะเพียงอย่างเดียวและคุณสามารถหลีกเลี่ยงการตรวจสอบว่ามีอยู่จริงหรือไม่
มันไม่มีอะไรมากไปกว่า
class Null(object):
def __init__(self, *args, **kwargs):
"Ignore parameters."
return None
def __call__(self, *args, **kwargs):
"Ignore method calls."
return self
def __getattr__(self, mname):
"Ignore attribute requests."
return self
def __setattr__(self, name, value):
"Ignore attribute setting."
return self
def __delattr__(self, name):
"Ignore deleting attributes."
return self
def __repr__(self):
"Return a string representation."
return "<Null>"
def __str__(self):
"Convert to a string and return it."
return "Null"
ด้วยวิธีนี้ถ้าคุณทำNull("any", "params", "you", "want").attribute_that_doesnt_exists()
มันจะไม่ระเบิด pass
แต่เพียงเงียบกลายเป็นเทียบเท่า
โดยปกติคุณจะทำอะไรเช่น
if obj.attr:
obj.attr()
ด้วยสิ่งนี้คุณเพียงทำ:
obj.attr()
และลืมมัน ระวังการใช้Null
วัตถุอย่างกว้างขวางอาจซ่อนข้อบกพร่องในรหัสของคุณ
คุณอาจต้องการอ่านบทความนี้ (เลือกไฟล์. pdf) ซึ่งกล่าวถึงรูปแบบการออกแบบในภาษาเชิงวัตถุแบบไดนามิก (เช่น Python) ในการอ้างถึงหน้า:
กระดาษนี้จะสำรวจว่ารูปแบบจากหนังสือ "Gang of Four" หรือ "GOF" นั้นมักถูกเรียกว่าอย่างไรปรากฏขึ้นเมื่อปัญหาที่คล้ายกันได้รับการแก้ไขโดยใช้ภาษาโปรแกรมเชิงวัตถุที่มีลำดับสูงกว่า รูปแบบบางส่วนหายไป - นั่นคือรองรับรูปแบบภาษาโดยตรงบางรูปแบบนั้นง่ายกว่าหรือมีจุดโฟกัสที่แตกต่างกันและบางรูปแบบก็ไม่เปลี่ยนแปลง