"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 사용자 정의 메서드와 속성을 사용하여 내장 Python 유형을 어떻게 확장할 수 있나요?

사용자 정의 메서드와 속성을 사용하여 내장 Python 유형을 어떻게 확장할 수 있나요?

2024년 11월 10일에 게시됨
검색:562

How can I extend built-in Python types with custom methods and attributes?

사용자 정의 메서드 및 속성을 사용하여 내장 Python 유형 확장

Python에서는 내장된 확장을 원하는 시나리오에 직면할 수 있습니다. 추가 메소드나 속성이 있는 유형. 그러나 이러한 유형을 직접 변경하는 것은 허용되지 않습니다.

예를 들어 JavaScript에서 설명한 대로 dict 유형에 helloWorld() 메서드를 추가하려고 하면 이러한 접근 방식이 지원되지 않는다는 것을 알 수 있습니다.

하위 클래스화 및 네임스페이스 대체를 사용한 해결 방법

원래 유형을 직접 확장할 수는 없지만 영리한 해결 방법이 있습니다. 대상 유형을 하위 클래스로 분류한 후 내장/전역 네임스페이스 내에서 이를 대체하면 원하는 동작을 효과적으로 모방할 수 있습니다.

다음은 Python의 구현입니다.

# Built-in namespace
import __builtin__

# Extended subclass
class mystr(str):
    def first_last(self):
        if self:
            return self[0]   self[-1]
        else:
            return ''

# Substitute the original str with the subclass on the built-in namespace    
__builtin__.str = mystr

print(str(1234).first_last())  # 14
print(str(0).first_last())  # 00
print(str('').first_last())  # ''

# Note that objects created by literal syntax will not have the extended methods
print('0'.first_last())  # AttributeError: 'str' object has no attribute 'first_last'

이 예에서 mystr 하위 클래스는 first_last() 메서드를 추가하여 str 유형을 확장합니다. __builtin__.str 할당은 모든 내장 str 호출을 수정된 하위 클래스를 대신 사용하도록 리디렉션합니다. 결과적으로 내장 str() 생성자로 인스턴스화된 객체는 이제 first_last() 메서드를 소유합니다.

그러나 리터럴 구문('문자열')을 사용하여 생성된 객체는 다음의 인스턴스로 유지된다는 점에 유의하는 것이 중요합니다. 수정되지 않은 str 유형이며 사용자 정의 메소드를 상속하지 않습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3