mẫu thiết kế python [đóng]


166

Tôi đang tìm kiếm bất kỳ tài nguyên nào đưa ra các ví dụ về Thực tiễn tốt nhất, các mẫu thiết kế và các nguyên tắc RẮN bằng Python.



Câu trả lời:


152

Một số chồng chéo trong những

Phần mềm trung cấp và nâng cao Mộc trong Python

Mã như một Pythonista: Python thành ngữ

Thành ngữ Python và hiệu quả

Ngày nhà phát triển của Google Hoa Kỳ - Các mẫu thiết kế Python

Một tài nguyên khác là ví dụ tại Python Recipes . Một số tốt không tuân theo các thực tiễn tốt nhất nhưng bạn có thể tìm thấy một số mẫu trong đó hữu ích


1
Liên kết thứ ba đã chết. Đã thử tìm gương nhưng không thể, Nếu có ai có liên kết chính xác, vui lòng thêm
formatkaka

1
Tương tự ở đây, Thành ngữ Python và Hiệu quả dường như không hoạt động.
Dawid Laszuk

Liên kết đầu tiên và thứ hai đã chết vì vậy tôi đã cập nhật chúng với ảnh chụp nhanh Lưu trữ Internet. Chúng dường như rất cũ mặc dù tôi chắc chắn rất nhiều điều vẫn còn liên quan.
mannykary

24

Kiểu

>>> import this

trong bảng điều khiển Python.

Mặc dù điều này thường được coi là một trò đùa (tốt!), Nó chứa một vài tiên đề cụ thể của trăn hợp lệ.



6

Bạn có thể bắt đầu ở đâyở đây .

Để có cái nhìn sâu hơn về các phần thiết kế, bạn nên xem Mẫu thiết kế: Các yếu tố của phần mềm hướng đối tượng có thể tái sử dụng . Mã nguồn không có trong Python, nhưng bạn không cần phải hiểu các mẫu.


8
Tôi nghĩ rằng điều quan trọng là phải hiểu làm thế nào để sử dụng python thành ngữ để thực hiện các mẫu thiết kế. Đó là một ngôn ngữ rất khác so với C ++, được sử dụng trong GOF, do đó chuyển từ C ++ sang python sẽ dẫn đến mã không phải là pythonic.
sakisk

1
Tôi có xu hướng không đồng ý. Một DP đơn hoặc DP khác sẽ có thể có trong bất kỳ ngôn ngữ OO nào, cho dù đó là Python, Java hay C ++. Theo ý kiến ​​của bạn thì không phải là pythonic là gì?
Paul Hiemstra

1
Liên kết đầu tiên là một bài báo khá nghèo nàn, với nhiều xác nhận sai lầm về Python. Do đó, thứ hai hiện tại là 404, do đó, tôi cho rằng, gây ra thiệt hại ít hơn nhiều :)
Brandon Rhodes

6

Một cái gì đó bạn có thể sử dụng để đơn giản hóa mã của mình khi gọi các thuộc tính trên các đối tượng có thể tồn tại hoặc không tồn tại là sử dụng Mẫu thiết kế đối tượng Null (mà tôi đã được giới thiệu trong Python Cookbook ).

Roughly, mục tiêu với các đối tượng Null là cung cấp một sự thay thế 'thông minh' cho kiểu dữ liệu nguyên thủy thường được sử dụng Không có trong Python hoặc Null (hoặc con trỏ Null) trong các ngôn ngữ khác. Chúng được sử dụng cho nhiều mục đích bao gồm cả trường hợp quan trọng trong đó một thành viên của một số nhóm yếu tố tương tự khác là đặc biệt vì bất kỳ lý do gì. Thông thường điều này dẫn đến các câu lệnh có điều kiện để phân biệt giữa các phần tử thông thường và giá trị Null nguyên thủy.

Đối tượng này chỉ ăn thiếu lỗi thuộc tính và bạn có thể tránh kiểm tra sự tồn tại của chúng.

Không có gì hơn

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"

Với điều này, nếu bạn làm Null("any", "params", "you", "want").attribute_that_doesnt_exists()nó sẽ không phát nổ, mà chỉ âm thầm trở thành tương đương pass.

Thông thường bạn sẽ làm một cái gì đó như

if obj.attr:
    obj.attr()

Với điều này, bạn chỉ cần làm:

obj.attr()

và quên nó đi Coi chừng việc sử dụng rộng rãi Nullđối tượng có khả năng che giấu các lỗi trong mã của bạn.


3

Bạn cũng có thể muốn đọc bài viết này (chọn tệp .pdf), thảo luận về Mẫu thiết kế trong các ngôn ngữ hướng đối tượng động (ví dụ: Python). Để trích dẫn trang:

Bài viết này tìm hiểu làm thế nào các mẫu từ cuốn sách "Gang of Four" hay "GOF", như thường được gọi, xuất hiện khi các vấn đề tương tự được giải quyết bằng ngôn ngữ lập trình hướng đối tượng, có thứ tự cao hơn. Một số mẫu biến mất - nghĩa là chúng được hỗ trợ trực tiếp bởi các tính năng ngôn ngữ, một số mẫu đơn giản hơn hoặc có trọng tâm khác nhau và một số mẫu về cơ bản không thay đổi.


1
Câu hỏi là về Python; bài báo nói về ngôn ngữ giống như Scheme, từ những gì tôi có thể nói, đã phát minh ra tại chỗ cho bài báo đặc biệt này. Trừ khi người hỏi là (a) một nhà khoa học máy tính hàn lâm với (b) kinh nghiệm lâu năm với các thực hành Python, tôi nghi ngờ liệu họ có thể lấy bất cứ thứ gì có giá trị ra khỏi bài báo không - và hơn nữa, có lẽ họ sẽ không hỏi câu hỏi này ở nơi đầu tiên :)
Brandon Rhodes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.