파이썬 라인 028 (패키지)

1 개 소개

  가장 중요한 기능은 패키지, 캡슐화, 상속, 다형성 (polymorphism) : 객체 지향 프로그래밍은 세 가지 특징이있다. 매우 익숙한 소리가 나지 않는다, 패키지는 데이터에 의미와 기능이 함께 통합되어,

예, 우리는 단어가 실제로 인기 인수의 패키지 "통합"전에 말했다. 또한, 객체 또는 클래스 속성에 패키지, 우리는 엄격하게 실제 두 단계, 그들에 대한 액세스를 제어 할 수 있습니다

이제 : 숨겨진 개방형 인터페이스.

2 숨겨진 속성

  파이썬 메커니즘 (비공개로 설정) 클래스를 두 번 밑줄 방법 숨겨진 속성의 시작 부분에 채택 있지만, 사실이 작업의 단순한 변형, 이중선로 시작하는 모든 클래스의 속성은 떨어졌다

클래스 정의 단계에서 자동으로 "클래스 이름 _ __ 속성 ​​이름,"검출 구문의 한 형태가 될 것이다 :

. 1  푸 :
 2      X = 1.
 3.      __N = 10   # 변형 _Foo__N 
4.  
5.      DEF  __init__ (자기) :   #가 __ 특성 개질 너무 또한, 함수 구문을 검색하는 함수를 정의 
. 6          . 셀프 __X = 10   # self._Foo__x 변형 
. 7  
. 8      DEF의  __f1 (셀프)   # 1 변형 _Foo__f1 
9.          인쇄 ( " __f1 RUN이 ' )
 10  
(11).      DEF F2 (자기) :   #이 함수를 정의가 기능 구문은 그렇게 시작을 검출 __ 속성은 또한 변형 
(12)          자체를.__f1 ()   # 변형 self._Foo__f1 () 
(13)는  
14  
(15)  이 전단 (푸. __dict__ )

   이 변형 문제가 필요 관심이 있음 :

  , 그래서이 _이 __ 속성은, 다음과 같은 Foo._Foo__N로, 방문 할 수있는 클래스 이름 : 1) 이름의 철자 수 있습니다 직접 외부 클래스 속성을 두 줄 쇠퇴의 시작입니다 액세스하지만, 클래스와 속성 이름을 알 수 없다 이 제한 외부 액세스이 없으며 엄격한 의미에서 지상, 문법적 의미의 단지 변형에서 작동합니다.

인쇄 (Foo._Foo__N)
 인쇄 (Foo._Foo__f1)
 >>> 10 
>>> <함수 푸. __f1 0x00000288C4DCCE18에서>

  2) 클래스 속성 내에 이중형 내부 위상 라인 특성 저하의 시작 클래스 정의에 균일 한 변형이 보낸 같은 자기 .__ F1 () 등의 감소를 시작 직접 액세스 이중선,이다. 

OBJ = 푸 () 
obj.f2 ()
 >>> __f1 실행

   3) 변형 클래스의 클래스 정의가 정의 단계 동안에 만 발생 후 할당되면, 변형되지 않는다.

OBJ = 푸 () 
OBJ. __y = 30
 인쇄 (. OBJ __dict__ )
 >>> { ' _Foo__x ' : 10 ' __y ' : 30}

3 오픈 인터페이스

  사용자 지정 속성은 숨겨진 목적으로하지 않습니다, 사용하는 것입니다.

  1) 데이터 은닉 직접 데이터의 유형의 외부 동작을 제한하고 상기 인터페이스는 클래스 경유 외부 조작 데이터를 허용 제공한다 인터페이스 엄격히 데이터에 대한 작업을 수행 할 수있는 추가 로직 부착 될 수있다 제어

# 디자이너 : 에곤의 
클래스 사람 :
     DEF  __init__ (자기 이름) : 
        자기. __name__ = 이름 

    DEF의 get_name (자기가) :
         #이 인터페이스를 통해 속성의 이름에 간접적으로 액세스 할 수 있습니다 
        #의 인쇄 ( '작은 쓰레기, 볼 수없는' ) 
        인쇄 (자기. __name__ ) 

    DEF SET_NAME (자기, 발) :
         IF 타입 (발)의이 인가  되지 STR :
             인쇄 ( " 작은 쓰레기가 문자열 유형 통과해야 ' )
             복귀 
        셀프. __name__ = 브로의 

#의 사용자 : 왕 펭
사람들 = OBJ ( ' 에곤 ' )
 #의 인쇄 (obj.name) # 할 수 없습니다 직접 속성 이름 
#의 obj.get_name () 
# obj.set_name ( '에곤') 
# obj.set_name (123123123)

  2) 숨기기 기능은 속성

  목적은 복잡성을 분리하는 것입니다.

 

추천

출처www.cnblogs.com/mmmmmrz/p/12660355.html