python - 대상 클래스에 대한 내장 방법

5807 단어

기본 제공 방법


__init__(self [, ...])

  • init 대상이 실례화될 때 호출되며 이 방법은 반환값이 있을 수 없음
  • __new__(cls [, ...])

  • 대상을 실례화할 때 첫 번째로 호출되는 방법
  • 기본 매개 변수는 init 방법에 그대로 전달됩니다
  • 한 대상obj를 되돌려줍니다. 보통class클래스 대상을 되돌려주고 다른 클래스 대상을 되돌려줍니다
  • #  , 
    #  : , 
    class CapStr(str):
        def __new__(cls,string):
            string = string.upper()
            return str.__new__(cls, string) #  new 
    a = CapStr("i love you")
    print(a) #   I LOVE YOU
    

    __del__(self)

  • 대상이 삭제되었을 때 이 방법을 사용합니다(쓰레기 회수 메커니즘이 실행될 때 변수 이름이 이 데이터 값을 가리키지 않습니다)
  • # __del__(self)
    
    class C:
        def __init__(self):
            print(" init, ")
        def __del__(self):
            print(" del, ")
    c1 = C() #  ,   init, 
    c2 = c1 #  
    c3 = c2
    del c3 #  
    del c2 #  
    del c1 #  , del, 

    __str__(self)**

  • 대상이 print () 인쇄를 사용할 때 호출
  • print() 출력 대상을 정의할 때str__방법, 그러면 이 방법에서return의 데이터를 출력합니다
  • __str__방법은 이 대상에 대한 설명으로 문자열을 되돌려야 합니다
  • class Cat: 
        def __init__(self, new_name, new_age):
            self.name = new_name
            self.age = new_age  
     
        def __str__(self):
            """   """
            # print(num)
            return " :%s ,  :%d" % (self.name, self.age)
    
    c1 = Cat("Tom", 8)
    print(c1) #  : :Tom ,  :8

    __repr__(self)

  • 및str__유사, 인쇄 용기 종류가 다를 때
  • class A:
        def __init__(self, name):
            self.name = name
    
        def __str__(self):
            return "name:%s,----->from str" % self.name
    
        def __repr__(self):
            return "name:%s,----->from repr" % self.name
    
    
    a1 = A("jack")
    a2 = A("cindy")
    print(a1)  # name:jack,----->from str
    p = [a1, a2]
    
    print(p) 
    # [name:jack,----->from repr, name:cindy,----->from repr]
    #  __repr__ , __str__ , 
  • print 단독 대상, 예를 들어 print(a1)일 때str와repr는 같은 기능을 가지고str와repr을 동시에 정의할 때str
  • 를 호출한다.
  • print 대상의 용기 형식은 리퍼가 대상마다 문자열 정보를 출력할 수 있고str는 안 된다
  • 속성 액세스:


    __getattr__(self, name)

  • 사용자가 점을 통해 존재하지 않는 속성을 호출하려고 할 때 터치됩니다
  • __getattribute__(self, name)

  • 이 종류의 속성이 접근할 때 호출되며 존재하는지 여부는 모두 가장 먼저 터치됩니다
  • __setattr__(self, name, value)

  • 하나의 속성이 설정되었을 때 터치하기;이 속성이 존재하지 않으면 반사 중인 setattr (obj,name,value)
  • 와 유사하게 추가됩니다.

    __delattr__(self, name)

  • 대상 속성이 삭제되었을 때 터치
  • demo:
    class C:
    
        def __getattribute__(self, name):
            print("getattribute")
            super().__getattribute__(name) #  
            # return self.name  
        def __getattr__(self, name):
            print("getattr")
        def __setattr__(self, name, value):
            print("setattr")
            super().__setattr__(name, value)
            # self.name = value  
        def __delattr__(self, name):
            print("delattr")
            super().__delattr__(name)
            # del self.name  
    c = C()
    print(c.x) #   getattributr/getattr
    c.x = 10 #   setattr
    print(c.x) #   getattribute
    del c.x #   delattr
    

    주의: 모든 속성 방법, 무한 순환 주의
  • 기류를 호출하는 상응하는 방법
  • 을 사용할 수 있다
  • 도 속성 사전을 직접 조작할 수 있다. 예를 들어self.dict__[key] = value
  • getattribute__및getattr__동시에 존재하는 경우 만 수행getattribute__, 이외에getattribute__실행 중 예외 AttributeError
  • 제거

    __getitem__


    __setitem__


    __delitem__


    item 시리즈가 사전 형식으로 속성에 접근할 때 호출됨
    사전 키로 존재하는 속성에 접근할 때getitem__,이 점은 와 다르다getattr__
    class Foo:
        def __init__(self, a):
            self.a = a
    
        def __getitem__(self, item):
            print("__getitem__ ")
    
        def __getattr__(self, item):
            print("__getattr__ ")
    
    
    f = Foo("word")
    f["a"]
    f["b"]
    
    #output:
    __getitem__ 
    __getitem__ 

    []를 사용하여 인스턴스 속성을 설정할 때 트리거setitem__
    class Foo:
        def __setitem__(self, key, value):
            print("__setitem__ ")
    
        def __setattr__(self, key, value):
            print("__setattr__ ")
    
    f = Foo()
    f.x = 10
    f["y"] = 10
    
    #output:
    __setattr__ 
    __setitem__ 

    []를 사용하여 인스턴스 속성을 삭제할 때 트리거delitem__
    class Foo:
        def __init__(self, a, b):
            self.a = a
            self.b = b
    
        def __delitem__(self, key):
            print("__delitem__ ")
    
        def __delattr__(self, key):
            print("__delattr__ ")
    
    f = Foo("one", "two")
    del f.a
    del f["b"]
    
    #output:
    __delattr__ 
    __delitem__ 

    설명자:


    설명자는 무엇입니까?
  • 묘사부호의 본질은 신식 클래스이다.**이 신식 클래스에서 적어도 을 실현했다.get__()、__set__()、 __delete__()** 중 하나 이상입니다. 이것도 설명자 프로토콜이 됩니다.

  • 설명자의 용도:
  • 묘사자의 역할은 다른 클래스의 속성을 대리하는 데 쓰인다. (묘사자의 대상을 이 클래스의 클래스 속성으로 정의해야 하며 구조 함수에 정의할 수 없다).

  • 속성 호출 시 트리거get__()
    **속성에 값을 지정할 때 트리거,set__()**
    del로 속성 삭제 시 트리거delete__()

    __get__


    __set__


    __delete__


    설명자를 정의합니다. 다음 신식 클래스는 설명자입니다.
    class Foo:
        def __get__(self, instance, owner):
            print(" get...")
        def __set__(self,instance, value):
            print(" set...")
        def __delete__(self, instance):
            print(" delete...")

    묘사 부류의 실례화된 대상은 속성 조작을 해도 이 세 가지 방법의 집행을 촉발하지 않는다
    설명자는
  • 데이터 설명자, 이상get__및set__
  • 비데이터 설명자, 구현되지 않음set__
  • 설명자는 우선 순위를 엄격히 따릅니다. 우선 순위는 높음에서 낮음으로 구분됩니다.
  • 클래스 속성
  • 데이터 설명자
  • 실례 속성
  • 비데이터 속성
  • 찾을 수 없는 속성 트리거getattr__()
  • 좋은 웹페이지 즐겨찾기