반응형
빌더 패턴을 사용하여 다양한 구성 가능성을 분리합니다. 기본적으로 ID (ID12345와 같은)라는 이름의 클래스가 있습니다. 이들은 모두 기본 빌더 클래스에서 상속됩니다. 스크립트에서이 앱이 실행될 때마다 각 클래스 (약 50 개)에 대한 인스턴스를 인스턴스화해야합니다. 그래서, 나는 다음과 같은 것을하는 대신에 확인하려고 노력하고 있습니다.
ProcessDirector = ProcessDirector()
ID12345 = ID12345()
ID01234 = ID01234()
ProcessDirector.construct(ID12345)
ProcessDirector.construct(ID01234)
ID12345.run()
ID01234.run()
다음과 같이 할 수 있습니까? (작동하지 않는다는 것을 알고 있습니다) :
IDS = ["ID12345", "ID01234"]
ProcessDirector = ProcessDirector()
for id in IDS:
builder = id() #some how instantiate class from string
ProcessDirector.construct(builder)
builder.run()
이렇게하면 나중에 새 ID를 추가해야 할 때 코드 전체에 새 ID를 추가하는 대신 IDS 목록에 ID를 추가하기 만하면됩니다.
데이터의 출처에 따라 몇 가지 다른 의견이있는 것 같습니다. 이러한 ID는 다른 사람이 액세스 할 수없는 파일에 입력됩니다. 나는 명령 줄에서 문자열을 읽는 것이 아니며 앞으로 새 ID를 추가 할 때 약간의 변경을 할 수 있기를 바랍니다.
해결 방법
이것이 당신이 원하는 것인지 확실하지 않지만 문자열에 나열된 클래스를 인스턴스화하는 더 파이썬적인 방법처럼 보입니다.
class idClasses:
class ID12345:pass
class ID01234:pass
# could also be: import idClasses
class ProcessDirector:
def __init__(self):
self.allClasses = []
def construct(self, builderName):
targetClass = getattr(idClasses, builderName)
instance = targetClass()
self.allClasses.append(instance)
IDS = ["ID12345", "ID01234"]
director = ProcessDirector()
for id in IDS:
director.construct(id)
print director.allClasses
# [<__main__.ID12345 instance at 0x7d850>, <__main__.ID01234 instance at 0x7d918>]
참조 페이지 https://stackoverflow.com/questions/553784
반응형
'파이썬' 카테고리의 다른 글
파이썬 builtins.TypeError: must be str, not bytes (0) | 2020.10.05 |
---|---|
파이썬 숫자에 '소수점'천 단위 구분 기호 추가 (0) | 2020.10.05 |
파이썬 Python의 시간대 이름에서 UTC 오프셋 가져 오기 (0) | 2020.10.05 |
파이썬 How to programmatically make a horizontal line in Qt (0) | 2020.10.05 |
파이썬 MySQL 데이터베이스에 데이터를 어떻게 삽입 할 수 있습니까? (0) | 2020.10.05 |
댓글