먼저, string.replace
을 거의 사용하지 않아야합니다. 문서가 말하는 것처럼 :
다음 목록은 문자열 및 유니 코드 개체의 메서드로도 정의됩니다. 자세한 내용은 문자열 방법을 참조하십시오.
이
x = replace()
첫째, replace
를라는 이름의 내장이없고, 하나 replace
라는 이름의 모듈에는 글로벌 없다 : 사용되지 않는 것처럼 당신은 ...
둘째 이러한 기능을 고려해야합니다,이 두 개의 별도 이유로 잘못 . from string import *
또는 from string import replace
을 수행 한 경우이 오류가 발생하지 않지만 이미 수행중인 경우 time.sleep
과 똑같은 from string import replace as x
을 정확하게 수행 할 수 있습니다.
두 번째로,이 괄호는 함수를 호출하고 함수 자체를 값으로 사용하지 않고 반환 값을 x
에 할당한다는 의미입니다.
그래서, 나는 당신이 원하는 것은이 생각 : str
개체에 replace
방법에 접근하고 x
에 저장하는 것
x = str.replace
. 이와 같은 "언 바운드 메서드"는 str
(즉, 일반 문자열)의 인스턴스를 첫 번째 인수로 전달하여 호출 할 수 있습니다.그래서 :
x(my_string, ' ', '_')
는 "monkeypatching"라고 원하고, 일반적으로 매우 간단 무엇
당신이 str
클래스 자체의 방법으로 이름 x
을 추가하려면 :
str.x = str.replace
불행히도 적어도 CPython에서는 대부분의 내장 유형에서 작동하지 않습니다. 이 같은 오류가 발생합니다 :
TypeError: can't set attributes of built-in/extension type 'str'
당신은 물론 str
의 자신의 서브 클래스를 생성하고, 모든 대신 str
의 여기 저기 그 사용 ...하지만 그 문자열 리터럴에 도움이되지 않습니다 수, 문자열을 명시 적으로 랩핑하지 않는 한 다른 함수 등에서 돌아온다. 그리고 그게 그럴만한 가치가 있는지 확신 할 수 없습니다.
이
class s(str):
x = str.replace
지금 당신이 할 수 있습니다 : 당신이 원하는 경우에, z
을
z = s(function_returning_a_string())
z = z.x(' ', '_')
을하지만 결국에 그 통지 당신이 원한다면, s
보다는 str
인에 돌아 x
를 계속, 당신은이 작업을 수행해야한다 :
z = s(z.x(' ', '_'))
... 그리고 특정 지점에서, 당신은 몇 번의 키 입력을 저장하는 경우에도, 당신은 아니에요 읽기 쉽고 관용적으로 비용을 절감 할 수 있습니다.
이유 : 당신은 또한 당신이 아마 원하는 것은
이고 그건 당신이 정말 엉망으로 생각하지 않는 것 덤비는없이 불가능, 그러나
을 수행 할 수 있습니다 'str' 객체에 대해'replace' 메소드 대신'string.replace'를 사용 하시겠습니까? 파이썬 1.5를 쓰지 않는다면 ... – abarnert
문맥에서 바꾸기의 사용을 바꾸고 싶다는 것을 의미합니까?'s = "hello world"; s = s.replace ('hello', 'goodbye') ' –
str 클래스는 기본 제공되는 확장이므로 네임 스페이스를 편집 할 수 없습니다. 그러나 파생 클래스에서 원하는대로 하위 클래스를 만들고 기능을 정의 할 수 있습니다. – mdurant