2009-06-08 4 views
6

추가 속성을 추가 할 Python 클래스가 있다고 가정합니다.Python에서 클래스 패칭

import path.MyClass 
setattr(MyClass, 'foo', bar) 

:

import path.MyClass 
MyClass.foo = bar 

과 같이 사용 무언가 사이에 어떤 차이가 있나요?

그렇지 않은 경우 사람들이 왜 첫 번째보다는 두 번째를하는 것처럼 보입니까? (. 예 여기 http://concisionandconcinnity.blogspot.com/2008/10/chaining-monkey-patches-in-python.html) (. 당신은 속성의 이름에 대한 변수를 사용할 수 있습니다 않은 setattr와)

+1

추가 메서드로 클래스 정의를 업데이트하지 않는 이유는 무엇입니까? 클래스 정의를 편집 할 수있을 때 왜이 모든 "마술 같은"것들을합니까? –

+0

제가이 질문을 할 때 저의 특별한 문제에서, 수업은 우리가 바꾸고 싶지 않은 도서관에서 왔습니다. 우리는 그것을 하위 클래스화할 수 없었습니다. 비록 일반적으로 동의합니다. – interstar

답변

11

명령문은 동일하지만,이 두 가지의 가장 역동적 인 선택이기 때문에 않은 setattr 사용할 수 있습니다

참조 : http://docs.python.org/library/functions.html#setattr

+0

동의. 특히 OP의 참조 된 블로그 항목에서 패치가 수행되는 방식이 필요합니다.이 방법의 이름은 monkeypatch 메서드의 내부에 알려지지 않았습니다. 덕분에 –

+0

. 하지만 나는 아직도 다른 하나보다 역동적이라는 것을 알지 못하기 때문에 질문을 업데이트했습니다 ... – interstar

+0

아 ... 아니, 무슨 뜻인지 알 겠어 ... 미안해 .. doh! – interstar

관련 문제