Python에서 원숭이 패치란 무엇입니까?

爱喝马黛茶的安东尼
풀어 주다: 2020-01-04 17:45:50
앞으로
2987명이 탐색했습니다.

Python에서 원숭이 패치란 무엇입니까?

런타임에 속성을 동적으로 교체하는 것을 원숭이 패치라고 합니다.

몽키 패치라고 불리는 이유는 무엇입니까?

런타임 속성 대체는 몽키 패치와 관련이 없습니다. 인터넷에서 발견된 몽키 패치의 유래에 대해서는 두 가지 의견이 있습니다.

1. 게릴라패치(Guerrilla Patch)는 잡군과 게릴라군이라는 뜻으로 이 부분이 독창적이지 않음을 나타낸다. 영어로 게릴라의 발음은 골리아(오랑우탄)와 비슷하다가 나중에는 원숭이(원숭이)로 표기됐다.

2. 또 다른 설명으로는 이 방법이 원본 코드를 엉망으로 만들기 때문에(messing with it) 영어로 Monkeying About(naughty)이라고 하여 Monkey Patch라고 합니다.

멍키 패치의 이름은 "모듈 런타임 교체 기능"에 해당하는 만큼 다소 혼란스럽습니다.

monkey 패치 사용

1. 런타임에 모듈을 동적으로 교체하는 방법

스택오버플로에는 두 가지 인기 있는 예가 있습니다.

consider a class that has a method get_data. This method does an external lookup (on a database or web API, for example), and various other methods in the class call it. However, in a unit test, you don't want to depend on the external data source - so you dynamically replace the get_data method with a stub that returns some fixed data.
로그인 후 복사

클래스에 get_data 메서드가 있다고 가정합니다. 이 메서드는 일부 외부 쿼리(예: 데이터베이스 또는 웹 API 쿼리 등)를 수행하고 클래스의 다른 많은 메서드에서 이를 호출합니다. 그러나 단위 테스트에서는 외부 데이터 소스에 의존하고 싶지 않습니다. 따라서 이 get_data 메소드를 일부 테스트 데이터만 반환하는 멍청한 메소드 상태로 대체합니다.

인용된 또 다른 예는 Zope 위키의 Monkey Patch에 대한 설명입니다.

from SomeOtherProduct.SomeModule import SomeClass def speak(self): return "ook ook eee eee eee!" SomeClass.speak = speak
로그인 후 복사

더 실용적인 예도 있습니다. 많은 코드에서 import json을 사용하는 경우 나중에 ujson의 성능이 더 높다는 것을 알았습니다. file ujson을 json으로 가져오도록 변경하는 비용이 더 높거나, json을 ujson으로 바꾸는 것이 기대치를 충족하는지 테스트하려면 다음만 추가하면 됩니다.

import json import ujson def monkey_patch_json(): json.__name__ = 'ujson' json.dumps = ujson.dumps json.loads = ujson.loads monkey_patch_json()
로그인 후 복사

2. 런타임 시 동적으로 모듈을 추가하는 방법

예를 들어, 팀의 공용 라이브러리에 있는 모듈을 참조하고 모듈의 기능을 강화하려는 경우 상속 외에도 Monkey Patch 사용을 고려할 수도 있습니다.

개인적으로는 Monkey Patch가 편리함을 제공하지만 소스 코드의 우아함을 망칠 위험도 있다고 생각합니다.

PHP 중국어 웹사이트에는 무료Python 비디오 튜토리얼이 많이 있습니다. 누구나 배울 수 있습니다!

이 기사는 https://www.jianshu.com/p/a19f936471e4

에서 복제되었습니다.

위 내용은 Python에서 원숭이 패치란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:jianshu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!