본문 바로가기

컴린이 일기장/Today I Learned

[TIL] Python isinstance / Json.dumps ; default

반응형

[주절주절]

😤

 

[Today I Learned]

# Python isinstance

주어진 인스턴스가 특정 클래스 혹은 데이터 타입인지 검사해주는 함수이다. isinstance(인스턴스, 클래스/데이터 타입)으로 사용한다. 

result = isinstance(1,int)
print(result)

> True

result = isinstance([1,2,3],list)
print(result)

> True

isinstance 함수가 type()에 대해 갖는 장점은 상속 관계도 확인할 수 있다는 점이다.

class Soccer(self):
	...
    
class Play(Soccer):
	...
    
p = Play()

type(p) == Play
> True

type(p) == Soccer
> False

isinstance(p, Play)
> True

isinstance(p, Soccer)
> True

isinstance(Play(), Soccer)
> True

isinstance(Play, Soccer)
> False

isinstance(p, (Play,Soccer,Play(),Soccer()) # tuple 안의 어떤 객체와 같으면 True 리턴
> True

 

# Json.dumps; default

Json.dumps() 메소드는 JsonPython object를 적절한 Json형식의 문자열(str)로 변환해준다. (Json.dumps()와 Json.dump()는 다른 메소드이다.) Json.dumps()에는 default라는 파라미터가 있는데, default에 전달하는 인자는 json 모듈이 알아들을 수 없는 타입의 변수가 들어간 상황을 처리하는 함수이다.  예를 들자면, np.float32, np.int64와 같은 type의 변수를 json string으로 변환하려면 에러가 나기 때문에, float형, int형 등으로 바꾸는 작업이 사전에 요구된다.

def write_json(data, fname):
    def _conv(o):
        if isinstance(o, (np.int64, np.int32)):
            return int(o)
        if isinstance(o, (np.float64,np.float32)):
            return float(o)
        raise TypeError

    json_str = json.dumps(data, ensure_ascii=False, default=_conv)
    f.write(json_str)

여러 유형의 데이터를 이용하더라도 위와 같이 각 경우에 따른 대처법을 json 모듈에게 알려줌으로써 문제를 해결 할 수 있다.

 

[질문 노트]

- 파이썬의 int, float와 Numpy의 int, float (np.int, np.float)의 차이는 무엇일까?

- 어떤 연산 과정이 위와 같은 type의 차이를 만드는 것일까?

 

반응형