[python] 파이썬 디자인 패턴

Python을 사용하여 모범 사례, 디자인 패턴 및 SOLID 원칙의 예를 제공하는 리소스를 찾고 있습니다.



답변

이 중 일부는 겹칩니다

Python의 중급 및 고급 소프트웨어 목공

Pythonista와 같은 코드 : 관용적 파이썬

파이썬 숙어와 효율성

미국 Google 개발자의 날-Python 디자인 패턴

또 다른 리소스는 Python Recipes에 있습니다. 좋은 숫자는 모범 사례를 따르지 않지만 유용한 패턴이 있습니다.


답변

유형

>>> import this

파이썬 콘솔에서.

이것은 일반적으로 (괜찮아!) 농담으로 취급되지만 몇 가지 유효한 파이썬 관련 공리를 포함합니다.


답변

Bruce Eckel의 “Pink에서 생각하기 “는 디자인 패턴에 크게 의존합니다.


답변

여기여기에서 시작할 수 있습니다 .

디자인 패턴 에 대해 자세히 살펴 보려면 디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소를 살펴보십시오 . 소스 코드는 Python이 아니지만 패턴을 이해할 필요는 없습니다.


답변

존재하거나 존재하지 않을 수있는 객체에서 속성을 호출 할 때 코드를 단순화하기 위해 사용할 수있는 것은 Null 객체 디자인 패턴 ( Python Cookbook 에서 소개 된 )을 사용하는 것입니다.

대략 Null 객체의 목표는 Python에서 자주 사용되는 기본 데이터 형식 None 또는 다른 언어의 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객체 를 광범위하게 사용하면 코드에 버그가 숨겨 질 수 있습니다.


답변

동적 객체 지향 언어 (예 : Python)의 디자인 패턴에 대해 설명하는 이 기사 (.pdf 파일 선택) 를 읽을 수도 있습니다 . 페이지를 인용하려면 :

이 백서에서는 “Gang of Four”또는 “GOF”책의 패턴이 동적, 고차, 객체 지향 프로그래밍 언어를 사용하여 유사한 문제를 해결할 때 나타나는 방식을 살펴 봅니다. 일부 패턴은 사라집니다. 즉 언어 기능에 의해 직접 지원되고 일부 패턴은 더 단순하거나 다른 초점을 가지며 일부는 본질적으로 변경되지 않습니다.


답변