>백엔드 개발 >파이썬 튜토리얼 >Python의 마법 방법: 사용자 정의 클래스를 내장 유형과 비슷하게 만듭니다.

Python의 마법 방법: 사용자 정의 클래스를 내장 유형과 비슷하게 만듭니다.

黄舟
黄舟원래의
2017-02-04 17:09:081608검색

Python의 매직 메소드는 Python의 __XXX__와 같은 사전 정의된 함수입니다.

Python의 매직 메소드 사용의 가장 큰 장점은 Python이 객체가 내장 유형처럼 동작하도록 하는 간단한 메소드를 제공한다는 것입니다.

__str__ 함수

__str__ 함수는 인스턴스 자체를 인쇄할 때 출력 내용을 처리하는 데 사용됩니다. 이 함수를 재정의하지 않으면 기본적으로 개체 이름과 메모리 주소가 출력됩니다.

예:

>>> class Student(object):
...     def __init__(self,name):
...             self._name = name
...
>>> print Student()


출력:

<__main__.Student 
object at 0x0000000002A929E8>.

그렇다면 어떻게 출력 결과를 더 읽기 쉽게 만들 수 있을까요? __str__ 함수를 재정의할 수 있습니다. 예를 들어

>>> class Student(object):
...     def __init__(self, name):
...             self._name = name
...     def __str__(self):
...             return  "I&#39;m a student, named %s" % self._name
...
>>> print Student("Charlie")


의 출력 결과는 다음과 같습니다.

I&#39;m a student, named Charlie.


str() 함수를 다음에 적용하면 실제로 개체의 __str__ 함수가 호출됩니다.


__repr__ 함수


__repr__도 객체를 직렬화하지만 __repr__은 Python 컴파일러에 대한 추가 정보입니다. . __str__이 더 읽기 쉽습니다.


repr() 함수를 객체에 적용할 때 우리가 호출하는 것은 실제로 함수의 __repr__ 함수입니다.


repr()과 쌍을 이루는 eval() 함수입니다. eval() 함수는 직렬화된 객체를 다시 객체로 변환합니다. 전제는 객체가 __repr__ 함수를 구현한다는 것입니다.


위 문단은 본인의 이해에 기초한 것으로 옳고 그름을 알 수 없습니다.

>>> item = [1,2,3]
>>> repr(item)
&#39;[1, 
2, 3]&#39;
>>> other_item = eval(repr(item))
>>> other_item[1]
2

__iter__ 함수


목록이나 튜플을 반복할 때 for...in...을 자주 사용합니다. 그것은 Iterable에서 목록을 상속받은 것입니다. Iterable은 __iter__ 함수를 구현합니다.


사용자 정의 개체를 반복 가능한 개체로 바꾸려면 __iter__ 및 next라는 두 가지 메서드를 구현해야 합니다.


__iter__ 함수는 객체를 반환합니다. 반복할 때 StopIteration이 캡처될 때까지 다음 값을 얻기 위해 다음 함수가 계속 호출됩니다.


Liao Xuefeng 선생님의 튜토리얼에서는 __next__ 메소드를 작성했는데 왜 그런지 모르겠습니다.

class Fib(object):
    def __init__(self):
        self.a, self.b = 0, 1
 
    def __iter__(self):
        return self
 
    def next(self):
        self.a, self.b = self.b, self.a + self.b
        if self.a > 10000:
            raise StopIteration
        return self.a
 
 
for i in Fib():
    print i


__getitem__ function


위는 __iter__ 함수를 구현하여 객체를 구현합니다. .


그래서 첨자로 요소를 추출하는 객체를 구현하는 방법은 무엇입니까?


이 작업은 개체의 __getitem__ 메서드를 구현하여 수행됩니다.


하나 드려요

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