마법의 몇 가지 일반적인 방법 파이썬

1 __ __ 초기화 () 메소드

  • 인스턴스가 생성 될 때 객체를 생성 할 때 기본적으로 호출 초기화 메서드 호출.
  • 두 전달 파라미터 객체 생성시 경우 __ __ 초기화 () 메소드는 자체 파라미터의 디폴트 이름을 가지며, 상기 제 파라미터로서 __init __ () 메소드 다른 자기 개의 외부 파라미터, 예를 들어 필요 __init __ (자체, X, Y).

우리는 객체에이 속성을 추가하기 전에 :

클래스 학생 :
    패스
   
stu1 = 학생 ()

stu1.name = "홍길동"
stu1.age = 18이다

** 이제 우리는 코드를 단순화하기 위해 __ () 메소드를 __init를 사용 **
클래스 학생 :
    는 def __init의 __ (자기, 이름, 나이) :
        self.name 이름 =
        self.age = 나이
   
STU1 = 학생 ( "조 스미스", 18)

그것보다 간결 코드 모양은 아니다

제 2 STR () 메소드

  • 일반 객체에 대한 설명 또는 원하는 출력의 자신의 정의의 결과.
  • ) (STR 호출을 호출 할 때 __str __ (), 즉, 개체가 문자열 형식으로 캐스팅된다.
  • 만큼 그들은 __ () 메소드를 __str 정의 된 바와 같은 __str __ () 메소드를 호출 한 대상의 인쇄 ()의 출력을 사용하는 경우,이 방법은 대가로 데이터를 출력한다.

** 정의되지 않았습니다 __str의 __ () 메소드 때 : **
클래스 학생 :
    는 def __init의 __ (자기, 이름, 나이) :
        = self.name 이름
        self.age = 나이
   
STU1 = 학생 ( "조 스미스", 18 인)
인쇄 ( stu1)

= S에의 STR (stu1)
인쇄 (S)

"" "
输出结果:
<. __ 0x03C3BCD0에서 주요 __ 학생 오브젝트>
<. 0x03C3BCD0에서 __ 주요 __ 학생 대상>
" ""

개체의 기본 메모리 주소를 반환 __ () 메소드 __str 정의되어 있지 않습니다.
** 정의 __str의 __ () 방법은입니다 : **
클래스 학생 :
    는 def __init __ (자기, 이름, 나이) :
        self.name 이름 =
        self.age = 나이
    DEF의 __str __ (자동) :
        반환 "이름 : % S \ t 나이 : D %의 "%합니다 (self.name, self.age)
   
STU1 = 학생 ("조 스미스 ", 18입니다)
인쇄 (STU1)

= S에의 STR (stu1)
인쇄 (S)

"" "
출력 :
이름 : 조 스미스 나이 : 18
이름 : 조 스미스 나이 : 18
" ""

3, 델 () 메소드


개체를 삭제하면 파이썬 인터프리터는이 방법이 __del __ () 방법, 메소드 호출로 설정됩니다.
 우선, 먼저 오브젝트의 수에 대한 참조, 개념을 이해해야한다. 우리는 객체 참조 번호, 반환 값에 대한 참조 = +1의 실제 수를 측정하기위한 모듈 (SYS) getrefcount ()를해야한다. 객체 번호에 대한 참조가 하나 인 경우 (2)는 그 객체에 대한 레퍼런스가 가변이며, 실제 리턴을 예시한다.
SYS 오기
클래스 A는 :
    합격
A = A ()
생성 된 객체 클래스에만 변수를 해주기 참조 #을
인쇄 (sys.getrefcount (a))
"" "
: 출력
2
" ""
변수 B를 만드는 이제 #을 또한, 기준 객체들, 다음에 참조 번호에 추가 될 것이며, 참조의 실제 수는 2가된다
B = A
인쇄 (sys.getrefcount (a))
"" "
출력 :
3
" ""

파이썬이 감지되면, 오브젝트의 수가 실제로, 개체는 삭제되고 0 참조하고 해당 통화의 __del __ () 방법이 될 것이다. 또 다른 경우는 프로그램이 완전히 후 해당 메모리가 __del의 __ () 메소드를 실행 해방한다 위에 구현 된 점이다.
이 프로그램이 정상적으로 실행 완료의 경우
가져 오기 SYS의
클래스 A :
    DEF __del __ (자동) :
        인쇄 ( "개체가 소멸")
A = A ()
"" "
출력 :
오브젝트가 파괴
" ""

가변 기준을 수동으로 제거 할 경우도있다 :
오기 SYS의
클래스 A는 :
    DEF __del __ (자기)
        인쇄 ( "개체가 파괴")
.이 때, 실제 참조 번호로 A = A () 1
B = A # 이것을 수는 실제로 2를 참조하는 경우

인쇄 ( "삭제 변수 A ')
델 A # 변수를 참조하여 (1)의 때의 실제 번호를 삭제

인쇄 ( "변수 나 삭제")
변수 B를 삭제 # b를 델을 한 후 실제 참조 번호는 파이썬 인터프리터가 그 호출 __del의 __ () 메소드의 객체 제거, 0
인쇄 ( "최종 프로그램을")
" ""
출력 :
상기 가변 삭제
B 삭제 변수
객체가 소멸
프로그램의 끝
. "" "

(4) 새로운 () 메소드

• __new __ 클래스 메소드는 인스턴스가 만들어 질 때 호출되는, 그것은 그 이전 시간 __init에 비해 __ 전화.
• __new __ CLS 클래스의 대표 인스턴스화, 적어도 하나 개의 매개 변수가이 매개 변수는 자동으로 인스턴스에서 파이썬 인터프리터에 의해 제공됩니다.
• __new __ 부모 클래스의 인스턴스를 반환 할 수에 특별한주의를 지불 __new__ 자신을 달성하기 위해 그것의 인스턴스, 그리고이 시점의 인스턴스를 반환, 반환 값이 있어야합니다 밖으로 __new__, 또는 밖으로 직접 __new__의 대상이다 예. Python3에서 객체의 각 클래스는 기본 상위 클래스를 상속합니다.
• __init__ 매개 변수가 자기가있는 반환 __new__의 예입니다, __ init__는 __, 기초의 __new__에 돌아올 수없는 값 init__ 다른 초기화 작업을 수행 할 수 있습니다
: 클래스 A
    는 def __init의 __ (셀프) :
        인쇄 ( "init 메소드를 호출")

    __ __new DEF가 (CLS) :
        인쇄 ( "새로운 메소드를 호출")
        슈퍼 ()를 호출 .__ 새로운 __ (CLS)
A = A ()

"" "
출력 :
새로운 방법은 호출
init 메소드를 호출합니다
." ""

4 개발 : __new 다음과 같이 하나의 실시 형태의 코드를 달성하는 방법을 대체 할 수 __ :

클래스 :
    # 개인 속성 클래스 밖으로 오브젝트의 인스턴스를 저장 정의
    _isinstance = 없음
   
    DEF __ (CLS) __new 없음
        ( "새로운 방법 호출") 인쇄
        , _isinstance가 아무도 없으면 # 결정 인스턴스를 생성 그렇지 않으면 직접 _isinstance 반환
        cls._isinstance없는 경우 :
            cls._isinstance = 슈퍼 () .__ 새로운 새로운 __ (CLS)
        반환 cls._isinstance


인쇄 (ID (A))
인쇄 (ID (A))
인쇄 (ID (A))
인쇄 (ID (A))
"" "
输出结果:
19,888,488
19,888,488
19,888,488
19,888,488
" ""

프로그램이 실행되는 동안 5, __ 슬롯 __ 우리 모두가 파이썬은 동적 언어 알고 속성, 당신은 속성을 추가 할 수 있습니다. 우리는 인스턴스의 속성을 제한하려면 어떻게 할까? 예를 들어, 사람 인스턴스의 이름과 나이를 추가하는 속성. 대상 제한 시간에 도달하기 위해, 파이썬은 수업 시간의 정의, 클래스 인스턴스를 제한하는 특별 ⼀ __slots__ 변수의 정의를 추가 할 수있는 속성 수 있습니다 :

Person 클래스 (객체) :
    __slots__ = ( "이름", "나이")
P = 사람 ()
P.name = "⽼王"
P.age = 20
P.score = 100

"" "
输出结果:
역 추적 (가장 최근 통화 마지막) :
  파일"<입력> ", 6 행에서 <모듈>
AttributeError : '사람'개체가 '점수'에는 속성이 없습니다
" ""

참고 : 사용은주의 __slots__, __ 하위 클래스 상속의 사용으로 클래스의 현재 인스턴스에 대한 slots__ 정의 속성을 사용하여 작동하지 않습니다.

추천

출처www.linuxidc.com/Linux/2019-08/160212.htm