개요
특정 변수의 값에 따라 변수를 동적으로 접근하고 싶다.
예로 들어, 아래와 같이 API를 호출할 때 사용하기 위한 APICaller라는 클래스가 있다고 하자.
class APICaller():
def __init__(self):
self.t10_url = "http://127.0.0.1:10000"
self.t20_url = "http://127.0.0.1:20000"
APICaller는 API 요청할 서버의 타입 별로 url 값을 갖고 있다. 즉, t10_url은 t10이라는 서버 타입의 url이고, t20_url은 t20이라는 서버 타입의 url이다. 이때, 조건문을 사용하지 않고 API를 보낼 서버 타입을 의미하는 server_type 변수 값에 따라 APICaller 객체의 url 값에 접근했으면 한다.
방법을 적어둔다.
방법
2023.03.30-[Python] 객체 속성 관련 함수에서 살펴봤던 getattr 함수를 응용하면 된다.
getattr 함수는 객체와 변수이름을 전달 받아, 해당 객체의 변수 값을 반환한다. 따라서 변수명을 전달할 때 f-string 등으로 문자열 포맷을 전달하면 조건문 없이도 특정 변수 값에 따라 다른 변수에 접근할 수 있다.
caller = APICaller()
server_type = 't10'
print(getattr(caller, f'{server_type}_url'))
참고 문서
https://pynative.com/python-instance-variables/