2009-04-26 3 views
2

여러 구현을 제공하여 모듈을 가져 오는 파일을 변경하지 않고 플랫폼 독립적 인 모듈에서 하나의 함수를 작성해야합니다. 다음 작품 :모듈의 플랫폼 별 구현을 제공하는 방법은 무엇입니까?

do_it = getattr(__import__(__name__), "do_on_" + sys.platform)

...하지만 휴식이 모듈은 패키지에 투입합니다.

다른 방법으로는 do_it()에서 다른 사람에게 하드 코드 된 호출이있는 if/elif가 있습니다.

더 나은 점이 있습니까?

답변

2

사용 globals()['do_on_' + platform]이 패키지 내부인지 여부를 작동합니다. 당신이 공장 패턴을 조사한다 클래스의 플랫폼 특정 인스턴스를 작성해야하는 경우

4

플랫폼 지원 코드를 패키지의 다른 파일에 넣으십시오. 그런 다음 파일 사람들에서 가져 해야하는이를 추가하는 대신 getattr 호출하고 독창적 인 생각의

if sys.platform.startswith("win"): 
    from ._windows_support import * 
elif sys.platform.startswith("linux"): 
    from ._unix_support import * 
else: 
    raise ImportError("my module doesn't support this system") 
+0

+1 : os 패키지에서 디자인 패턴을 복사하십시오. –

관련 문제