| 함수/메서드 | 기능 (역할) | 대상 | 반환값 | 예시 코드 | 주의사항 |
|---|---|---|---|---|---|
isinstance(obj, cls) | 객체가 특정 클래스(들)의 인스턴스인지 확인 | 모든 객체 | True 또는 False | isinstance(3, int) | 여러 타입도 튜플로 가능: isinstance(x, (int, str)) |
getattr(obj, attr, default) | 객체에서 속성값 가져오기 (default는 선택) | 객체 | 속성값 또는 default | getattr(obj, "name", "unknown") | 없을 때 default 없으면 AttributeError |
hasattr(obj, attr) | 속성 존재 여부 확인 (접근은 안 함) | 객체 | True 또는 False | hasattr(obj, "config") | 실제 값을 가져오진 않음 |
dict.get(key, default) | 딕셔너리에서 키 값 안전하게 조회 | 딕셔너리 | 값 또는 default | my_dict.get("key", 0) | 존재하지 않으면 기본값 반환 |
setattr(obj, attr, value) | 객체에 속성 동적으로 설정 | 객체 | 없음 (None) | setattr(obj, "flag", True) | 없는 속성도 새로 추가 가능 |
class Config:
def __init__(self):
self.name = "GPT"
self.use_cache = True
config = Config()
my_dict = {"lr": 0.001, "batch_size": 32}
# 1. isinstance
print(isinstance(config, Config)) # True
print(isinstance(3.14, (int, float))) # True
# 2. getattr
print(getattr(config, "name", "N/A")) # GPT
print(getattr(config, "nonexistent", "N/A")) # N/A
# 3. hasattr
print(hasattr(config, "use_cache")) # True
print(hasattr(config, "tokenizer")) # False
# 4. dict.get
print(my_dict.get("lr", 0.01)) # 0.001
print(my_dict.get("epochs", 10)) # 10
# 5. setattr
setattr(config, "gradient_checkpointing", True)
print(config.gradient_checkpointing) # True
| 상황 | 추천 도구 |
|---|---|
| 타입 확인 | isinstance() |
| 객체에서 안전하게 속성 읽기 | getattr() |
| 객체 속성 존재만 체크 | hasattr() |
| 딕셔너리 키 접근 | dict.get() |
| 객체 속성 동적으로 설정 | setattr() |
좋은 질문입니다! 결론부터 말하면:
torch_dtype = torch.torch_dtype처럼 쓰면 안 됩니다.
왜냐면"torch_dtype"는 문자열 변수이지,torch.float32나torch.bfloat16같은 속성 이름 자체가 아니기 때문입니다.
import torch
torch_dtype = "float32" # 문자열 형태로 주어졌다고 가정
torch_dtype = getattr(torch, torch_dtype) # ✅ OK
이건 결국 아래처럼 실행되는 것과 같아요:
torch_dtype = torch.float32 # ✅ 이건 직접 속성 접근
torch_dtype = "float32"
torch_dtype = torch.torch_dtype # ❌ torch에 torch_dtype라는 속성은 없음
torch.torch_dtype는 실제로 존재하지 않아요.
"torch_dtype"는 변수 이름일 뿐이죠.
| 형태 | 설명 | 가능 여부 |
|---|---|---|
torch.float32 | 직접 접근 (정적) | ✅ |
getattr(torch, "float32") | 문자열로 속성 접근 (동적) | ✅ |
torch.torch_dtype | torch에 "torch_dtype"라는 속성은 없음 | ❌ |
즉, getattr()은 "문자열로 속성 이름이 주어졌을 때" 그걸 객체에서 찾아주는 함수입니다.
torch_dtype = torch.float32처럼 속성이 고정되어 있으면 굳이 쓸 필요 없지만,
문자열로 속성 이름이 주어질 경우엔 필수입니다.