품목

Python 및 고급 방법, 더 나은 프로그래밍을 위한 dunder 기능

Python은 환상적인 프로그래밍 언어입니다. GitHub의, 또한 2022년에 두 번째로 많이 사용되는 언어입니다.

Python의 가장 흥미로운 이점은 대규모 프로그래머 커뮤니티입니다.

Python에는 모든 사용 사례에 대한 패키지가 있는 것 같습니다.

광활한 Python 프로그래밍 세계에는 초보자가 알아차리지 못하는 경우가 많지만 언어 생태계에서 매우 중요한 기능 세트가 있습니다.

매직 메소드는 사전 메소드의 집합입니다.defi특별한 구문 기능을 제공하는 Python의 나이트입니다. 다음과 같이 시작과 끝에 이중 대시가 있으면 쉽게 알아볼 수 있습니다. __init__, __call__, __len__ … 등.

마법의 방법

매직 메서드를 사용하면 사용자 지정 개체가 내장 Python 유형과 유사하게 동작할 수 있습니다.

이 기사에서는 강력한 dunder 기능에 중점을 둘 것입니다. 우리는 그들의 목적을 탐구하고 그들의 사용에 대해 논의할 것입니다.

Python 초보자이든 숙련된 프로그래머이든 이 기사는 Dunder 기능에 대한 포괄적인 이해를 제공하여 Python 코딩 경험을 보다 효율적이고 즐겁게 만드는 것을 목표로 합니다.

Python의 마법은 단순성과 다재다능함뿐만 아니라 Dunder 기능과 같은 강력한 기능에도 있다는 점을 기억하십시오.

__init__

아마도 가장 기본적인 던더 기능일 것입니다. 이것은 우리가 새 객체를 생성(또는 이름에서 알 수 있듯이 초기화)할 때마다 Python이 자동으로 호출하는 매직 메서드입니다.__init__

클래스 피자:
def __init__(자체, 크기, 토핑):
자체 크기 = 크기
self.toppings = 토핑

# 이제 피자를 만들어 봅시다
my_pizza = 피자('대형', ['페퍼로니', '버섯'])

print(my_pizza.size) # 이렇게 인쇄됩니다: large
print(my_pizza.toppings) # 이렇게 출력됩니다: ['pepperoni', 'mushrooms']

이 예제에서는 Pizza라는 클래스를 만듭니다. 초기화 시 지정할 매개변수를 포함하도록 __init__ 함수를 설정하고 사용자 정의 개체의 속성으로 설정합니다.

여기서는 클래스의 인스턴스를 나타내는 데 사용됩니다. 그래서 우리가 self.size = size라고 쓸 때, 우리는 "이봐, 이 피자 객체는 크기 속성을 가지고 있어. size, 개체를 만들 때 제공한 크기가 무엇이든 원합니다.”

__str__ 및 __repr__

__스트__

이것은 우리가 다음을 수행할 수 있게 해주는 Python의 마법 메서드입니다. defi맞춤 품목에 대한 설명을 마치겠습니다.

다음을 사용하여 개체를 인쇄하거나 문자열로 변환할 때 str(), Python이 있는지 확인하십시오. defi제가 방법을 생각해냈습니다. __str__ 해당 개체의 클래스에 대해.

그렇다면 해당 방법을 사용하여 객체를 문자열로 변환하십시오.

함수를 포함하도록 피자 예제를 확장할 수 있습니다. __str__ 다음과 같이 :

class Pizza: def __init__(self, size, toppings): self.size = size self.toppings = toppings def __str__(self): return f"{self.size} 피자 with {', '.join(self.toppings )}" my_pizza = Pizza('large', ['pepperoni', 'mushrooms']) print(my_pizza) # 이렇게 출력됩니다: A large pizza with pepperoni, mushroom
__repr__

__str__ 함수는 객체의 속성을 설명하는 비공식적인 방법에 가깝습니다. 반면에 __repr__은 사용자 정의 개체에 대한 보다 공식적이고 상세하며 명확한 설명을 제공하는 데 사용됩니다.

전화하면 repr() 개체에서 또는 개체 이름을 콘솔에 입력하기만 하면 Python이 메서드를 찾습니다. __repr__.

Se __str__ 그것은 아니다 definite, Python은 다음을 사용합니다. __repr__ 개체를 인쇄하거나 문자열로 변환하려고 할 때 백업으로 사용됩니다. 그래서 종종 좋은 생각이 됩니다 defi최소한 끝내라 __repr__, 그렇지 않더라도 defi나온다 __str__.

우리가 할 수 있는 방법은 다음과 같습니다 defi니어 __repr__ 피자 예시:

클래스 피자:
def __init__(자체, 크기, 토핑):
자체 크기 = 크기
self.toppings = 토핑

데프 __repr__(자체):
return f"피자('{self.size}', {self.toppings})"

my_pizza = 피자('대형', ['페퍼로니', '버섯'])
print(repr(my_pizza)) # 이렇게 인쇄됩니다: Pizza('large', ['pepperoni', 'mushrooms'])

__repr__ 피자 객체를 재생성하기 위해 Python 명령으로 실행할 수 있는 문자열을 제공하는 반면 __str__ 더 인간적인 설명을 제공합니다. 이 dunder 방법을 조금 더 잘 씹는 데 도움이되기를 바랍니다!

__추가하다__

파이썬에서는 연산자를 사용하여 숫자를 더할 수 있다는 것을 모두 알고 있습니다. +로서 3 + 5.

그러나 일부 사용자 지정 개체의 인스턴스를 추가하려면 어떻게 해야 할까요?

던더 기능 __add__ 그것은 우리가 그렇게 할 수 있게 해준다. 이는 우리에게 다음과 같은 능력을 제공합니다. defi운영자의 행동을 마무리 + 우리의 개인화 된 항목에.

일관성을 위해 다음을 원한다고 가정해 보겠습니다. defi행동을 끝내다 + 피자 예제에서. 두 개 이상의 피자를 함께 추가할 때마다 모든 토핑이 자동으로 결합된다고 가정해 보겠습니다. 다음과 같이 표시됩니다.

클래스 피자:
def __init__(자체, 크기, 토핑):
자체 크기 = 크기
self.toppings = 토핑

def __add__(자신, 기타):
인스턴스가 아닌 경우(기타, 피자):
raise TypeError("다른 피자만 추가할 수 있습니다!")
new_toppings = self.toppings + other.toppings
피자 반환(self.size, new_toppings)

# 피자 두 판을 만들어 봅시다
pizza1 = 피자('대형', ['페퍼로니', '버섯'])
pizza2 = 피자('라지', ['올리브', '파인애플'])

# 이제 그것들을 "추가"해봅시다.
Combine_pizza = 피자1 + 피자2

print(combined_pizza.toppings) # 이렇게 출력됩니다: ['pepperoni', 'mushrooms', 'olives', 'pineapple']

던더와 마찬가지로 __add__, 우리도 할 수 있습니다 defi다음과 같은 다른 산술 기능을 완료합니다. __sub__ (연산자를 사용하여 빼기 -) 그리고 __mul__ (연산자를 사용한 곱셈의 경우 *).

__len__

이 던더 방법을 사용하면 다음을 수행할 수 있습니다. defi기능이 무엇인지 끝내십시오. len() 우리의 주문을 받아서 만들어진 품목을 위해 돌려보내야 합니다.

파이썬 사용 len() 목록 또는 문자열과 같은 데이터 구조의 길이 또는 크기를 가져옵니다.

이 예의 맥락에서 피자의 "길이"는 토핑의 수라고 말할 수 있습니다. 구현 방법은 다음과 같습니다.

클래스 피자:
def __init__(자체, 크기, 토핑):
자체 크기 = 크기
self.toppings = 토핑

데프 __len__(자신):
len(self.toppings) 반환

# 피자를 만들어 봅시다
my_pizza = 피자('대형', ['페퍼로니', '버섯', '올리브'])

print(len(my_pizza)) # 이렇게 출력됩니다: 3

__len__ 메서드에서는 목록의 길이만 반환합니다. toppings. 지금, len(my_pizza) 얼마나 많은 토핑이 있는지 알려줍니다. my_pizza.

__이터__

이 dunder 방법을 사용하면 개체를 반복할 수 있습니다. 즉, for 루프에서 사용할 수 있습니다.

이를 위해 우리는 또한 defi기능을 끝내다 __next__, 이것은 다음 용도로 사용됩니다. defi반복에서 다음 값을 반환해야 하는 동작을 완료합니다. 또한 시퀀스에 더 이상 요소가 없다는 이벤트에 대한 반복 가능 신호를 보내야 합니다. 우리는 일반적으로 예외를 발생시켜 이를 달성합니다. StopIteration.

피자 예에서 토핑을 반복하고 싶다고 가정해 보겠습니다. Pizza 클래스를 반복 가능하게 만들 수 있습니다. defi넨도 어 메소드 __iter__:

클래스 피자:
def __init__(자체, 크기, 토핑):
자체 크기 = 크기
self.toppings = 토핑

데프 __iter__(자체):
자기 n = 0
자기를 반환

데프 __next__(자체):
self.n < len(self.toppings)인 경우:
결과 = self.toppings[self.n]
자체 n += 1
반환 결과
그밖에:
StopIteration 올리기

# 피자를 만들어 봅시다
my_pizza = 피자('대형', ['페퍼로니', '버섯', '올리브'])

# 그리고 이제 그것을 반복하자
my_pizza의 토핑:
프린트(토핑)

이 경우 for 루프는 다음을 호출합니다. __iter__, 카운터를 초기화합니다. (self.n) 피자 객체 자체를 반환합니다. (self).

그런 다음 for 루프 호출 __next__ 각 토핑을 차례로 가져옵니다.

언제 __next__ 모든 양념을 반납하고 StopIteration 그것은 예외를 던지고 for 루프는 이제 더 이상 토핑이 없다는 것을 알고 반복 프로세스를 중단합니다.

Ercole Palmeri

혁신 뉴스레터
혁신에 관한 가장 중요한 뉴스를 놓치지 마세요. 이메일로 받으려면 가입하세요.
태그 : 파이썬

최근 기사

미래가 여기에 있습니다: 해운 산업이 글로벌 경제를 어떻게 혁신하고 있습니까?

해군 부문은 150억 시장을 향해 항해해온 진정한 글로벌 경제강국입니다.

1 월 2024

출판사와 OpenAI, 인공지능이 처리하는 정보의 흐름을 규제하기 위한 계약 체결

지난 월요일, Financial Times는 OpenAI와의 계약을 발표했습니다. FT는 세계적 수준의 저널리즘에 라이선스를 부여합니다…

4월 30 2024

온라인 결제: 스트리밍 서비스를 통해 영원히 결제하는 방법은 다음과 같습니다.

수백만 명의 사람들이 스트리밍 서비스 비용을 지불하고 월간 구독료를 지불합니다. 당신은…

4월 29 2024

Veeam은 보호부터 대응, 복구까지 랜섬웨어에 대한 가장 포괄적인 지원을 제공합니다.

Coveware by Veeam은 계속해서 사이버 강탈 사건 대응 서비스를 제공할 것입니다. Coveware는 법의학 및 교정 기능을 제공할 것입니다…

4월 23 2024