python 헷깔리는 attr정리

Leejaegun·2025년 4월 22일

Python & etc

목록 보기
22/27

🧩 Python 속성/타입 관련 함수 정리표

함수/메서드기능 (역할)대상반환값예시 코드주의사항
isinstance(obj, cls)객체가 특정 클래스(들)의 인스턴스인지 확인모든 객체True 또는 Falseisinstance(3, int)여러 타입도 튜플로 가능: isinstance(x, (int, str))
getattr(obj, attr, default)객체에서 속성값 가져오기 (default는 선택)객체속성값 또는 defaultgetattr(obj, "name", "unknown")없을 때 default 없으면 AttributeError
hasattr(obj, attr)속성 존재 여부 확인 (접근은 안 함)객체True 또는 Falsehasattr(obj, "config")실제 값을 가져오진 않음
dict.get(key, default)딕셔너리에서 키 값 안전하게 조회딕셔너리값 또는 defaultmy_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.float32torch.bfloat16 같은 속성 이름 자체가 아니기 때문입니다.


getattr

🔍 설명을 예제로

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_dtypetorch에 "torch_dtype"라는 속성은 없음

즉, getattr()"문자열로 속성 이름이 주어졌을 때" 그걸 객체에서 찾아주는 함수입니다.
torch_dtype = torch.float32처럼 속성이 고정되어 있으면 굳이 쓸 필요 없지만,
문자열로 속성 이름이 주어질 경우엔 필수입니다.

profile
Lee_AA

0개의 댓글