백엔드 개발 파이썬 튜토리얼 Python 매직 메소드 - 속성 변환 및 클래스 표현에 대한 자세한 설명

Python 매직 메소드 - 속성 변환 및 클래스 표현에 대한 자세한 설명

Aug 04, 2016 am 08:55 AM
python 마법의 방법

형변환 마법

형 변환 마법은 실제로 str 및 int와 같은 팩토리 함수를 구현한 결과입니다. 일반적으로 이러한 함수에는 몇 가지 관련 마법 메서드도 있습니다.

•__int__(자신)

•int 함수에 해당하는 정수형으로 변환합니다.

•__long__(자기)

•long 함수에 대응하는 long 정수형으로 변환합니다.

•__float__(자신)

•float 함수에 해당하는 부동 소수점 유형으로 변환합니다.

•__복잡한__(자기)

•복소수 함수에 해당하는 복소수형으로 변환합니다.

•__oct__(본인)

•oct 함수에 해당하는 8진수로 변환합니다.

•__hex__(자신)

•16진수 함수에 해당하는 16진수로 변환합니다.

•__index__(자기)

•먼저, 이 메소드는 int 또는 long일 수 있는 정수를 반환해야 합니다. 이 메서드는 두 가지 위치에서 유효합니다. 첫째, 연산자 모듈의 인덱스 함수에서 얻은 값은 이 메서드의 반환 값입니다. 둘째, 다음 코드 데모는 구체적으로 수행됩니다.

•__trunc__(자기)

• math.trunc(self)가 사용될 때 호출됩니다. __trunc__는 self 유형의 정수 잘림을 반환합니다(일반적으로 긴 정수).

•__coerce__(자신, 타인)

• 유형 강제를 구현했습니다. 이 메서드는 coerce 내장 함수의 결과에 해당합니다(이 함수는 Python 3.0부터 제거되었으므로 이 마법 메서드가 의미가 없음을 의미합니다. 후속 버전에서 다시 지원 여부에 대해서는 공식 홈페이지에 따라 다릅니다. )

•이 함수의 기능은 서로 다른 두 숫자 유형을 동일한 유형으로 강제 변환하는 것입니다. 예:

메서드는 변환된 두 숫자에 해당하는 기본 요소를 반환합니다. 우선 순위는 복소수 > 부동 소수점 수 > 긴 정수 > 정수입니다. 변환 중에는 두 매개변수 중 우선순위가 높은 유형으로 변환됩니다. 변환을 완료할 수 없으면 TypeError가 발생합니다.

이 매직 메소드를 정의할 때 변환을 완료할 수 없으면 None을 반환해야 합니다.

여기에는 Python이 1 1.0과 같은 작업을 수행할 때 먼저 강제 함수를 호출하여 동일한 유형으로 변환한 다음 실행합니다. 왜냐하면 1 1.0 = 2.0이기 때문입니다. 변환 후 실제 연산은 1.0 1.0 입니다. 그런 결과를 얻는 것은 놀라운 일이 아닙니다.

코드 예:

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __int__(self):
    return int(self.x) + 1

  def __long__(self):
    return long(self.x) + 1

a = Foo(123)
print int(a)
print long(a)
print type(int(a))
print type(long(a))
로그인 후 복사

여기서 주목해야 할 점은 매직 메소드의 반환 값이 기대치를 충족해야 한다는 것입니다. 예를 들어 문자열(str)과 같은 다른 유형을 임의로 반환하는 경우 __int__는

int 유형을 반환해야 합니다. , 목록( list) 등을 사용하면 오류가 보고됩니다.

def __int__(self):
    return str(self.x)
로그인 후 복사

def __int__(self):
    return list(self.x)
로그인 후 복사

그러나 int는 long을 반환할 수 있으며 int를 반환하면 long이 자동으로 long으로 처리됩니다.

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __int__(self):
    return long(self.x) + 1

  def __long__(self):
    return int(self.x) + 1

a = Foo(123)
print int(a)
print long(a)
print type(int(a))
print type(long(a))
로그인 후 복사

위의 내용은 python2.7.11에서 발생했습니다. 이는 BUG일 수도 있을 정도로 이상한 동작입니다. 간단히 말해서 오류를 방지하려면 해당 유형을 반환하는 데 주의해야 합니다.


__index__(자신):

우선 Operator.index()에 해당하고, Operator.index(a)는 a.__index__()와 같습니다.

import operator

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __index__(self):
    return self.x + 1

a = Foo(10)
print operator.index(a)
로그인 후 복사

연속적으로 사용하면 놀라운 또 다른 기능:

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __index__(self):
    return 3

a = Foo('scolia')
b = [1, 2, 3, 4, 5]
print b[a]
print b[3]
로그인 후 복사

인덱스로 사용 가능하고 슬라이스 가능:

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __index__(self):
    return int(self.x)

a = Foo('1')
b = Foo('3')
c = [1, 2, 3, 4, 5]
print c[a:b]
로그인 후 복사

실제로 슬라이스 내부에 사용된 함수 슬라이스가 이를 처리합니다. 관심 있는 학생들은 이 함수에 대해 알아볼 수 있습니다.

a = Foo('1')
b = Foo('3')
c = slice(a, b)
print c
d = [1, 2, 3, 4, 5]
print d[c]
로그인 후 복사

__coerce__(자신, 타인):

코드 예:

class Foo(object):
  def __init__(self, x):
    self.x = x

  def __coerce__(self, other):
    return self.x, str(other.x)

class Boo(object):
  def __init__(self, x):
    self.x = x

  def __coerce__(self, other):
    return self.x, int(other.x)

a = Foo('123')
b = Boo(123)
print coerce(a, b)
print coerce(b, a)
로그인 후 복사

요약: 첫 번째 매개변수를 호출하는 매직 메소드입니다.

수업 대표:

클래스의 표현은 실제로 외부 특성입니다. 예를 들어 print 문을 사용할 때 실제로 인쇄되는 내용은 해당 함수의 출력입니다.

•__str__(self)

• 클래스 인스턴스에서 str()이 호출될 때 발생하는 동작을 정의합니다. print는 기본적으로 str() 함수를 호출하기 때문입니다.

•__repr__(자신)

• 클래스 인스턴스에서 repr()이 호출될 때 발생하는 동작을 정의합니다. str()과 repr()의 주요 차이점은 대상 그룹입니다. repr()은 기계가 읽을 수 있는 출력을 반환하고, str()은 사람이 읽을 수 있는 출력을 반환합니다. Repr() 함수는 교환 모드에서 기본적으로 호출됩니다

•기능.

•__유니코드__(자체)

• 클래스 인스턴스에서 unicode()가 호출될 때 발생하는 동작을 정의합니다. unicode()는 str()과 매우 유사하지만 유니코드 문자열을 반환합니다. 클래스에서 str()이 호출되었지만 __unicode__()만 정의하면

•일. 호출 시 올바른 값이 반환되도록 __str__()을 정의해야 합니다. 모든 사람이 유니코드()를 사용하려는 기분은 아닙니다.

•__format__(self, formatstr)

• 새로운 형식 문자열 메서드를 사용하여 형식을 지정하기 위해 클래스의 인스턴스를 사용할 때 발생하는 동작을 정의합니다. 예를 들어, "Hello, {0:abc}!".format(a)는 a.__format__("abc")가 호출되도록 합니다. 이는 자신만의 숫자 또는 문자열 유형을 정의하는 데 유용합니다

• 매우 의미가 있습니다. 특별한 서식 옵션을 제공할 수 있습니다.

•__hash__(자신)

• 클래스 인스턴스에서 hash()가 호출될 때 발생하는 동작을 정의합니다. 사전에서 빠른 비교를 위해서는 정수를 반환해야 합니다.

•__hash__를 구현할 때 일반적으로 __eq__도 구현한다는 점에 유의하세요. 다음 규칙이 있습니다: a == b 는 hash(a) == hash(b) 를 의미합니다. 즉, 두 매직 메소드의 반환 값이 일관되어야 합니다.

•여기서 '해시 가능한 객체'의 개념을 소개합니다. 먼저, 해시 가능한 객체의 해시 값은 수명 주기 동안 변경되지 않아야 하며, 해시 값을 얻는다는 것은 __hash__ 메서드를 구현하는 것을 의미합니다. 해시 객체는 비교 가능합니다. 즉, __eq__ 또는

구현을 의미합니다.

•__cmp__ 메소드와 해시 객체가 동일할 경우 해당 해시 값이 동일해야 함을 의미합니다. 이 기능을 구현하려면 __eq__의 반환 값이 __hash__와 동일해야 합니다.

•해시 가능한 객체는 사전 키 및 컬렉션 멤버로 사용될 수 있습니다. 이러한 데이터 구조는 내부적으로 해시 값을 사용하기 때문입니다. Python에 내장된 모든 불변 개체(예: 튜플, 문자열, 숫자 등)는 해시 가능하지만 목록과 같은 변경 가능 개체는 해시할 수 없습니다.

• 사전 등.

• 사용자 정의 클래스의 인스턴스는 기본적으로 해시 가능하며 해시 값이 id 함수에서 나오므로 자신 이외의 누구와도 동일하지 않습니다. 그러나 이것이 hash(a) == id(a)를 의미하는 것은 아닙니다. 이 기능에 주의하시기 바랍니다.

•__nonzero__(자기)

• 클래스 인스턴스에서 bool()이 호출될 때 발생하는 동작을 정의합니다. 이 메서드는 반환하려는 값에 따라 True 또는 False를 반환해야 합니다. (python3.x에서는 __bool__로 변경됨)

•__dir__(자신)

• 클래스 인스턴스에서 dir()이 호출될 때 발생하는 동작을 정의합니다. 이 메서드는 사용자에게 속성 목록을 반환해야 합니다.

•__sizeof__(자체)

• 클래스 인스턴스에서 sys.getsizeof()가 호출될 때 발생하는 동작을 정의합니다. 이 메소드는 객체의 크기를 바이트 단위로 반환해야 합니다. 이는 일반적으로 C 확장으로 구현된 Python 클래스에 더 적합하며, 이는 이러한 확장을 이해하는 데 도움이 될 수 있습니다.

여기서 특별히 이해하기 어려운 부분은 없으므로 코드 예시는 생략합니다.

위의 Python 매직 메소드 - 속성 변환 및 클래스 표현에 대한 자세한 설명은 모두 편집자가 공유한 내용이므로 참고가 되기를 바라며, Script Home을 지원해 주시길 바랍니다.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PS가 계속 로딩을 보여주는 이유는 무엇입니까? PS가 계속 로딩을 보여주는 이유는 무엇입니까? Apr 06, 2025 pm 06:39 PM

PS "로드"문제는 자원 액세스 또는 처리 문제로 인한 것입니다. 하드 디스크 판독 속도는 느리거나 나쁘다 : CrystalDiskinfo를 사용하여 하드 디스크 건강을 확인하고 문제가있는 하드 디스크를 교체하십시오. 불충분 한 메모리 : 고해상도 이미지 및 복잡한 레이어 처리에 대한 PS의 요구를 충족시키기 위해 메모리 업그레이드 메모리. 그래픽 카드 드라이버는 구식 또는 손상됩니다. 운전자를 업데이트하여 PS와 그래픽 카드 간의 통신을 최적화하십시오. 파일 경로는 너무 길거나 파일 이름에는 특수 문자가 있습니다. 짧은 경로를 사용하고 특수 문자를 피하십시오. PS 자체 문제 : PS 설치 프로그램을 다시 설치하거나 수리하십시오.

PS가 시작될 때 로딩 문제를 해결하는 방법은 무엇입니까? PS가 시작될 때 로딩 문제를 해결하는 방법은 무엇입니까? Apr 06, 2025 pm 06:36 PM

부팅 할 때 "로드"에 PS가 붙어있는 여러 가지 이유로 인해 발생할 수 있습니다. 손상되거나 충돌하는 플러그인을 비활성화합니다. 손상된 구성 파일을 삭제하거나 바꾸십시오. 불충분 한 메모리를 피하기 위해 불필요한 프로그램을 닫거나 메모리를 업그레이드하십시오. 하드 드라이브 독서 속도를 높이기 위해 솔리드 스테이트 드라이브로 업그레이드하십시오. 손상된 시스템 파일 또는 설치 패키지 문제를 복구하기 위해 PS를 다시 설치합니다. 시작 오류 로그 분석의 시작 과정에서 오류 정보를 봅니다.

PS의 로딩 속도 속도를 높이는 방법? PS의 로딩 속도 속도를 높이는 방법? Apr 06, 2025 pm 06:27 PM

느린 Photoshop 스타트 업 문제를 해결하려면 다음을 포함한 다중 프론트 접근 방식이 필요합니다. 하드웨어 업그레이드 (메모리, 솔리드 스테이트 드라이브, CPU); 구식 또는 양립 할 수없는 플러그인 제거; 정기적으로 시스템 쓰레기 및 과도한 배경 프로그램 청소; 주의를 기울여 관련없는 프로그램 폐쇄; 시작하는 동안 많은 파일을 열지 않도록합니다.

PS가 파일을 열 때로드 문제를 해결하는 방법은 무엇입니까? PS가 파일을 열 때로드 문제를 해결하는 방법은 무엇입니까? Apr 06, 2025 pm 06:33 PM

"로드"는 PS에서 파일을 열 때 말더듬이 발생합니다. 그 이유에는 너무 크거나 손상된 파일, 메모리 불충분, 하드 디스크 속도가 느리게, 그래픽 카드 드라이버 문제, PS 버전 또는 플러그인 충돌이 포함될 수 있습니다. 솔루션은 다음과 같습니다. 파일 크기 및 무결성 확인, 메모리 증가, 하드 디스크 업그레이드, 그래픽 카드 드라이버 업데이트, 의심스러운 플러그인 제거 또는 비활성화 및 PS를 다시 설치하십시오. 이 문제는 PS 성능 설정을 점차적으로 확인하고 잘 활용하고 우수한 파일 관리 습관을 개발함으로써 효과적으로 해결할 수 있습니다.

PS가 항상 로딩되고 있음을 보여줄 때 로딩 문제를 해결하는 방법은 무엇입니까? PS가 항상 로딩되고 있음을 보여줄 때 로딩 문제를 해결하는 방법은 무엇입니까? Apr 06, 2025 pm 06:30 PM

PS 카드가 "로드"되어 있습니까? 솔루션에는 컴퓨터 구성 (메모리, 하드 디스크, 프로세서) 확인, 하드 디스크 조각 청소, 그래픽 카드 드라이버 업데이트, PS 설정 조정, PS 재설치 및 우수한 프로그래밍 습관 개발이 포함됩니다.

PS 페더 링은 어떻게 전환의 부드러움을 제어합니까? PS 페더 링은 어떻게 전환의 부드러움을 제어합니까? Apr 06, 2025 pm 07:33 PM

깃털 통제의 열쇠는 점진적인 성격을 이해하는 것입니다. PS 자체는 그라디언트 곡선을 직접 제어하는 ​​옵션을 제공하지 않지만 여러 깃털, 일치하는 마스크 및 미세 선택으로 반경 및 구배 소프트를 유연하게 조정하여 자연스럽게 전이 효과를 달성 할 수 있습니다.

설치 후 MySQL을 사용하는 방법 설치 후 MySQL을 사용하는 방법 Apr 08, 2025 am 11:48 AM

이 기사는 MySQL 데이터베이스의 작동을 소개합니다. 먼저 MySQLworkBench 또는 명령 줄 클라이언트와 같은 MySQL 클라이언트를 설치해야합니다. 1. MySQL-Uroot-P 명령을 사용하여 서버에 연결하고 루트 계정 암호로 로그인하십시오. 2. CreateABase를 사용하여 데이터베이스를 작성하고 데이터베이스를 선택하십시오. 3. CreateTable을 사용하여 테이블을 만들고 필드 및 데이터 유형을 정의하십시오. 4. InsertInto를 사용하여 데이터를 삽입하고 데이터를 쿼리하고 업데이트를 통해 데이터를 업데이트하고 DELETE를 통해 데이터를 삭제하십시오. 이러한 단계를 마스터하고 일반적인 문제를 처리하는 법을 배우고 데이터베이스 성능을 최적화하면 MySQL을 효율적으로 사용할 수 있습니다.

PS 카드가 로딩 인터페이스에 있으면 어떻게해야합니까? PS 카드가 로딩 인터페이스에 있으면 어떻게해야합니까? Apr 06, 2025 pm 06:54 PM

PS 카드의로드 인터페이스는 소프트웨어 자체 (파일 손상 또는 플러그인 충돌), 시스템 환경 (DIFE 드라이버 또는 시스템 파일 손상) 또는 하드웨어 (하드 디스크 손상 또는 메모리 스틱 고장)로 인해 발생할 수 있습니다. 먼저 컴퓨터 자원이 충분한 지 확인하고 배경 프로그램을 닫고 메모리 및 CPU 리소스를 릴리스하십시오. PS 설치를 수정하거나 플러그인의 호환성 문제를 확인하십시오. PS 버전을 업데이트하거나 폴백합니다. 그래픽 카드 드라이버를 확인하고 업데이트하고 시스템 파일 확인을 실행하십시오. 위의 문제를 해결하면 하드 디스크 감지 및 메모리 테스트를 시도 할 수 있습니다.

See all articles