높은 주문 개체는 파이썬을 지향 - 기술자 및 학습 디자인 패턴 # 원숭이


 

 

기술자 ##

> 클래스가 세 개의 마법 방법 (`__get __, __ 세트 __, __ delete__`) 하나 또는 모든 시간을 포함,이 클래스라고 설명 클래스

### 역할

> 설명자 (취득, 양도, 삭제) 클래스의 멤버의 역할은 세부적인 관리 작업을 수행한다

> 기술자 클래스 기술자에 속하는 조작 부재의 클래스 에이전트, class 속성은 정의

### 세 마술 방법

```파이썬

'' '

__get __ (자기, 인스턴스 소유자)

트리거 메커니즘 : 액세스 개체의 구성원 속성이 자동으로 트리거 될 때 (회원은 기술자 관리에 인도 된 경우)

역할 : 획득 한 재산의 설정된 현재의 값

매개 변수 :. 1 자기 설명 개체 2 개체 클래스 회원들에 의해 관리. 3. 관리는 클래스의 멤버

반환 값 :의 구성원으로 획득 한 재산의 가치

주의 사항 : 없음

__set __ (자체 예컨대, 값)

트리거 메커니즘 : 객체의 멤버 속성을 설정하면 자동으로 트리거 될 때 (회원은 기술자 관리에 인도 된 경우)

역할 : 회원의 할당을 관리하려면

매개 변수 :. 1 자기 설명 개체 2 개체 클래스 회원들에 의해 관리. 3. 값 설정 될

반환 값 : 없음

주의 사항 : 없음

__delete __ (자체 예)

트리거 메커니즘 : 당신이 (멤버는 기술자 관리에게 넘겨 된) 속성이 자동으로 트리거되는 객체의 멤버를 삭제하면

역할 : 삭제 멤버 속성으로 관리된다

매개 변수 :. 1 자기 설명 개체 2 개체 클래스 회원들에 의해 관리.

반환 값 : 없음

주의 사항 : 없음

'' '

```

전체 데이터 기술자 :( ###)

> 매직 방법은 세 가지 데이터 기술자 클래스가 있습니다

불완전 ### 비 데이터 서술자 :()

> 마법의 방법이 아닌 기술자의 세 가지 클래스를 클래스가있다가 없다

### 기본적인 사용 형식

> 에이전트 클래스의 멤버에 할당 된 현재 설명자 속성 클래스 필요

코드 예 :

```파이썬

# 기술자 클래스를 정의

수업으로 PersonName () :

    __name = 'ABC'

    데프 __get __ (자기, 인스턴스 소유자) :

        # 인쇄 (자기, 인스턴스 소유자)

        반환 자기 .__ 이름

    데프 __set __ (자체, 예, 값) :

        # 인쇄 (자체, 예, 값)

        자기 .__ 이름 = 값

    __ 데프 __delete (자체 예) :

        # 인쇄 (자체 예)

        # 델 자기 .__ 이름

        인쇄 ( '삭제할 수 없습니다')

# 일반 범주에서 정의

클래스 사람 ()

    클래스 기술자 클래스의 멤버로 # 얻을 수 속성

    객체 클래스 식별자의 다른 클래스의 설명의 부재 # 값 ()

    이 클래스의 멤버가 동작 할 때 그런 # 것이 이해된다 다른 개체의 동작

    ) (= 이름으로 PersonName

객체 # 인스턴스화

ZS = 이용시 ()

인쇄 (zs.name)

zs.name = '홍길동'

인쇄 (zs.name)

zs.name의

인쇄 (zs.name)

```

분석 기술자의 응용 ###

```파이썬

# 학생 클래스를 정의, 학생들은 ID, 이름, 점수를 기록 할 필요가

클래스 학생 () :

    데프 (자동, ID, 이름, 점수) __ __init :

        ID = self.id

        self.name = 이름

        self.score = 점수

    데프 returnMe (자기) :

        정보는 F '' '=

        학생 수 : {self.id}

        참가자의 이름 : {self.name}

        학생의 점수 : {self.score}

        '' '

        인쇄 (정보)

'' '

# 요구 사항 : 학생들은 범위 0 ~ 100의 점수 수 있습니다

해결 방법 :

    1. 점수 __init__ 방법의 범위의 전류를 검출

        # 감지 점수의 범위는

        점수> = 0 점수 <= 100의 경우 :

            self.score = 점수

        객체가 초기화 될 때이 솔루션은 효과적 일 수있다.

    2. 않은 setattr 마법을 검출하는 방법을 정의

        할당은 스코어 점 검출되면, 검출 판정 점수

            데프 __setattr __ (자체, 키, 값) :

        # 할당이 점수에 있는지 여부를 감지

        키 == '점수'경우 :

            # 감지 점수의 범위는

            값> 0 값 <= 100의 경우 :

                객체 .__ 않은 setattr __ (자체, 키, 값)

            그밖에:

                ( '현재의 점수를 충족하지 못하는') 인쇄

        그밖에:

            객체 .__ 않은 setattr __ (자체, 키, 값)

        학생들은 언어 점수, 수학 점수, 영어 점수 등의 시간을 수행하는 방법보다 더 많은 점수를하는 경우

        다른 하나는 현재 코드는이 클래스가 점점 더 그것의 임?

    3. 생각이 속성에 대한 우리의 점수를 나타 내기 위해 설명을 사용할 수 있습니다

        1. 점수 기술자 클래스 정의

        클래스 2. 학생들은 프록시 클래스 기술자의 회원들에게 점수

        긴 부분 할당 및 액세스 에이전트의에서 확인 클래스 기술자 등 3로

'' '

# 기술자 수준의 점수 관리 에이전트를 정의

클래스 점수 () :

    데프 __get __ (자기, 인스턴스 소유자) :

        반환 자기 .__ 점수

    데프 __set __ (자체, 예, 값) :

        값> 0 값 <= 100의 경우 :

            자기 .__ 점수 = 값

        그밖에:

            ( '점수가 요구 사항을 충족하지 않는') 인쇄

#을 사용하여 설명 클래스 속성 점수는 에이전트 점수

클래스 학생 () :

    ) (= 점수를 점수

    데프 (자동, ID, 이름, 점수) __ __init :

        ID = self.id

        self.name = 이름

        self.score = 점수

    데프 returnMe (자기) :

        정보는 F '' '=

        학생 수 : {self.id}

        참가자의 이름 : {self.name}

        학생의 점수 : {self.score}

        '' '

        인쇄 (정보)

객체 # 인스턴스화

ZS = 학생 (1011, '장 화가', 99)

zs.returnMe ()

zs.score = -20

zs.score = 88

zs.returnMe ()

```

기술자는 ### 세 가지 형식을 정의

```파이썬

# 권장 형식은 클래스 기술자를 정의하여 달성

'' '

클래스 ScoreManage () :

    데프 __get __ (자기, 인스턴스 소유자) :

        통과하다

    데프 __set __ (자체, 예, 값) :

        통과하다

    __ 데프 __delete (자체 예) :

        통과하다

클래스 학생 () :

    () = ScoreManage 점수

'' '

# 형식 둘째, 프로퍼티 기능을 이용하여 달성

'' '

클래스 학생 () :

    # 직접 유사한 세 가지 방법이 클래스에서 관리 할 필요가 정의

    데프 getscore (자기) :

        ( 'getscore')를 인쇄

    데프 setscore (자기, 값) :

        인쇄 ( 'setscore'값)

    데프 delscore (자기) :

        ( 'delscore')를 인쇄

    # 등록 기능, 대응 방법에 대응 한 세 가지 방법으로 지정. __get __ 2. __set __ 3. __delete__

    점수 = 재산 (getscore, setscore, delscore)

ZS = 학생 ()

# 인쇄 (zs.score)

# = 200 zs.score

# 델의 zs.score

'' '

# 달성하기 위해 세 가지 @property 데코레이터 구문을 사용하여 형식

'' '

클래스 학생 () :

    __score = 없음

    @특성

    데프 (자동) 점수 :

        인쇄 ( '수')

        반환 자기 .__ 점수

    @ score.setter

    데프 (자동, 값) 점수 :

        ( '설정')를 인쇄

        자기 .__ 점수 = 값

    @ score.deleter

    데프 (자동) 점수 :

        인쇄 ( '삭제')

        델 자체 .__ 점수

ZS = 학생 ()

# 인쇄 (zs.score)

zs.score = 199

인쇄 (zs.score)

델의 zs.score

'' '

```

## 디자인 패턴

> 디자인 모드 기능 또는 요약 및 요약 된 경험과 코드와 코드 설계 및 구현 단계의 교훈에 따라 인간의 필요의 완료 전에 클래식 모드를 달성하기 위해 요구된다.

>

> 디자인 패턴 코드 형식은 고정 된 것이 아니라 객체 지향 프로그래밍의 디자인

예 ### 싱글 (단일) 디자인 패턴

> 현재 스크립트에서, 같은 클래스는 사용에 객체를 생성 할 수 있습니다. 이 상황은 (단일) 싱글됩니다.

```파이썬

'' '

싱글의 경우 예를 들어, 고려 :

한 사람이 하나의 결혼 생활을 할 수 있습니다 특히 싱글과 결혼 법률 관계,

사회에서 어떻게 완전한 일부일처 제이다?

당신이 결혼하고 싶은 경우에, 당신은 남북 국 등록에 가야한다

남북 국은 두 사람이 보는이의 계정을 감지해야하는지 여부를 결혼의 이상 상태

당신이 결혼하는 경우, 추력 아웃해야합니다.

당신이 결혼하지 않는 경우, 당신은 장을 구축하고, 등록을 시작할 수 있습니다.

음, 거기에 싱글 톤 디자인 패턴 파이썬을 달성하는 방법에 대한 생각이 라인에 따라?

1. 당신은 현재의 객체를 생성하는 과정을 제어하기 위해 갈 수있는 방법이 필요?

    생성자 __new__

2. 객체가 있는지 여부를 나타내는 저장 및 레이블 할 필요가있다

    저장을위한 개인 재산을 생성, 기본값 없음

3. 객체 생성 과정에서 감지하여 물체가 있는지를?

    당신이 객체 객체를 생성하고 객체가 저장되지 않으면 객체를 반환

    스토리지는 객체가 직접적 객체를 반환하는 경우, 당신은 새로운 객체를 만들 필요가 없습니다

'' '

클래스 데모 () :

    # 2 개인 속성 저장된 객체를 정의, 기본값 없음

    __obj = 없음

    1. 정의 생성자 #

    데프 __new __ (CLS, * 인수, ** kwargs로) :

        # 3. 물체가 있는지의 여부, 오브젝트를 생성하는 과정에서

        그렇지 않은 경우 CLS .__ OBJ :

            # 판사는 어떤 객체 경우, 다음 개체가 생성되어 저장된다

            CLS .__ OBJ = 오브젝트 .__ 새로운 __ (CLS)

        # 객체 저장소로 직접 반환

        CLS .__ OBJ 반환

객체 # 인스턴스화

데모 A = ()

B = 데모 ()

인쇄의 (a)

인쇄 (b)

'' '

<주요 __ __. 0x106f4d850에서 데모 object>

<주요 __ __. 0x106f4d850에서 데모 object>

'' '

```

### 믹스 인 혼합 디자인 패턴

#### 믹스 인 클래스

+ 믹스 인 오히려 물체보다, 함수를 표시해야한다.

+ 믹스 인 기능은 여러 기능이있는 경우, 더 정의 믹스 인 클래스가 될 것입니다, 단일해야합니다

+ 믹스 인 파이썬은 다중 상속을 통해 이루어진다

+ 믹스 인이 클래스는 일반적으로 단독으로 사용되지 않지만, 증가시키는 다른 종류의 혼합물, 함수

+ 믹스 인 클래스는 일부 기능이 부족 수, 아이가 서브 클래스가 제대로 실행할 수 있습니다,이 클래스 믹스 인을 상속하지 않는 경우에도, 구현 서브 클래스에 의존하지 않는다. .

혼합 믹스 인 클래스를 사용하여 #### 장점?

디자인 패턴 1. 믹스 인 혼합 클래스, 클래스는 수정 된 전제의 내용에없는 클래스의 기능을 확장

명확한 코드의 재사용, 이러한 코드의 구조 간단한을 개선하기 위해 2. 믹스 인 혼합 유형

3. 함수는 복잡한 다단계 설계 상속을 피하기 위해 (새로운 혼합 믹스 인 클래스를 생성) 발전에 따라 조정될 필요가있다.

예 :

```파이썬

'' '

연속의 필수 전제 조건에 대한 필요성은 관계되어야 상속 'IS-A'는의

예를 들면 :

    애플은 과일이기 때문에 애플은 과일을 상속 갈 수있다

    애플은하지 상속 점심, 점심에는 사과가있을 수 있기 때문에

    차 자체가 차량이기 때문에 같은 자동차 차량, 상속 될 수 있습니다

어떤 차량?

자동차, 비행기, 헬리콥터,이 차량은

어떻게 관계 그것의 이러한 종류의 설계?

예를 들어, 차량 클래스를 생성하고 다음 달성하기 위해 이동하는 차량에 속한 모든을 상속합니다. . .

그러나 항공기와 헬기 비행 기능을 가지고 있고, 비행이 함수를 정의 할 경우 자동차가 다음 차량에,하지 않았다, 그것은 적절하지 않을 것입니다. .

각각 비행기와 헬리콥터 클래스 비행 않습니다이 기능을 달성하기 위해 수 있을까요? 네,하지만 당신은 코드를 다시 사용할 수 없습니다.

어떻게 할까?

별도의 클래스 차량, 항공기와 두 부모 클래스를 정의하려면이 항공기와 헬리콥터는이 두 가지 범주를 상속 갈 수 있습니다.

'' '

# 이송 운반기

클래스 차량 () :

    제품의 # 운송

    데프 huo의 (자기) :

        인쇄 ( '제품의 운송')

    # 캐리 승객

    데프 (자동) 르네 :

        인쇄 ( '승객을 운반')

항공기 #

클래스 FlyingMixin () :

    데프 (자동) 비행 :

        ( '... 벗을 수') 인쇄

#DEFINE 자동차

클래스 카트 (자동차) :

    통과하다

#DEFINE 항공기

클래스 비행기 (차량, FlyingMixin) :

    통과하다

#DEFINE 헬리콥터

클래스 헬기 (차량, FlyingMixin) :

    통과하다

이 때 # 비행 차량 때문에,이 클래스를 상속하는 클래스 비행 항공기를 정의합니다. 이 문제를 해결할 수 있습니다.

그러나 # 1. 받는 반면 다중 상속 클래스가 나타납니다이 '입니다-A'2. 항공기의이 유형은 쉽게 잘못 해석 될 수있다

# 솔루션은 다중 상속을 사용하는 것입니다 만,이 클래스의 항공기, 혼합 믹스 인 클래스로 정의,

이때 기체는 확장 함수 클래스를 다른 연장이 클래스의 # 같다

'' '

위의 코드에서, 헬리콥터 및 비행기는 FlyingMixin을 상속 다중 상속을 사용하고 있지만

그러나, Minin에이 FlyingMixin 클래스 이름을 추가로 코드를 읽고 뒤에있는 사람에게,이 클래스는 클래스 믹스 인은

'' '

```

### 추상 클래스 (알고)

> 추상 클래스는 특수 클래스입니다 :

인스턴스를 직접 생성 할 수없는 추상 클래스는 사용할 수 없습니다> 1. 대상이된다.

> 2. 추상 클래스는 추상 메소드를 포함, 메소드는 추상 메소드 구현 코드가 아닙니다.

> 3. 추상 클래스는 서브 클래스 상속을 필요로하며, 부모 클래스의 추상 메소드를 오버라이드 (override). 당신은 사용하기 전에.

```

추상 클래스는 일반 기능과 요구의 일반적인 응용 프로그램은, 그 중 일부는 분명하고 요구 사항이 완료 될 때까지 프로그래밍, 프로그램 디자인 계획한다

뿐만 아니라, 일부 수요가 취소 또는 특정 요구 사항을 달성하는 방법을 모르는되지있을 수 있습니다

그럼 당신은 추상적 인 방법으로 정의, 달성하기 위해 이동이 불확실하거나 필요 뒤에있는 방법을 달성하는 방법을 넣을 수 있습니다 (단 메소드 이름을 정의하지 쓰기 특정 코드)

응용 프로그램의 추상 클래스입니다 :

    예를 들어, 일부 기본 기능과 확장을 프레임 워크를 개발. . . .

    하지만 구체적으로 어떤 종류의 사람들의 프레임 워크 제품 개발, 개발 프레임 워크의 모르거나 확인하지 않습니다.

    따라서 프레임 워크는 특정 기능을 가지고 있고, 나머지의 정의는 방법에 자신의 특정 비즈니스 로직을 달성하기 위해 필요한 몇 가지 방법을 남겼다 것입니다.

```

추상 클래스 정의 :

```파이썬

수입 ABC

# 당신은 추상 클래스를 정의하려면,이 클래스의 메타 클래스의 속성은 메타 클래스 = abc.ABCMeta을해야합니다

클래스 WriteCode (메타 클래스 = abc.ABCMeta) :

    #은 장식에 장식을 사용하여 추상적 인 방법을 필요

    @ abc.abstractmethod

    데프 write_php (자기) :

        통과하다

    데프 write_java (자기) :

        ( '코드는 자바의 개발을 달성하기 위해') 인쇄

    데프 (자동) write_python :

        ( '파이썬 개발 코드를 달성') 인쇄

# 추상 클래스는 직접 객체를 인스턴스화 할 수 없습니다

# OBJ WriteCode = ()

# 인쇄 (OBJ)

#TypeError : 추상 메소드의 write_php와 수 없습니다 인스턴스화 추상 클래스 WriteCode

# 추상 클래스 상속합니다 서브 클래스를 정의하고 추상 클래스 추상 메소드

클래스 데모 (WriteCode) :

    데프 write_php (자기) :

        ( '코드 개발 PHP를 달성하기 위해') 인쇄

데모 A = ()

인쇄의 (a)

a.write_java ()

a.write_php ()

a.write_python ()

```

마스터리는 추월을 구부릴 것, 방법을 학습!

원숭이에 학습 : 단지 부티크 자신의 업적을!

추천

출처www.cnblogs.com/itxdl/p/12522554.html