본문 바로가기

예제로 JSON 파일에서 어떤 데이터를 읽어와서 객체를 만드는 예제에서 설명을 가져왔습니다. 참고해서 보세요! 왜 사용하는지, 왜 써야 하는지 힌트가 되는 글입니다.

import_from_file 메서드는 JSON 파일에서 데이터를 읽어와 ClockRelations 객체를 생성하는 메서드입니다. 이 메서드는 클래스 메서드 (classmethod)로 정의되어 있습니다. 클래스 메서드를 사용하는 이유와 해당 메서드의 작동 방식을 설명하겠습니다.

import_from_file 메서드

@classmethod
def import_from_file(cls, filename):
    with open(filename, 'r') as f:
        data = json.load(f)
    obj = cls(data['clocks'])
    obj.relations = {frozenset(eval(key)): value for key, value in data['relations'].items()}
    obj.aliases = data['aliases']
    return obj

클래스 메서드 (classmethod)

클래스 메서드는 클래스 자체를 첫 번째 인수로 받는 메서드입니다. 클래스 메서드를 정의할 때는 메서드 위에 @classmethod 데코레이터를 사용하고, 첫 번째 인수를 cls로 명명하는 것이 일반적입니다. cls는 현재 클래스 자체를 나타내며, 이를 통해 클래스의 인스턴스를 생성하거나 클래스 속성에 접근할 수 있습니다.

import_from_file 메서드를 클래스 메서드로 정의하는 이유

  1. 클래스 인스턴스를 생성할 수 있음:

    • import_from_file 메서드는 JSON 파일에서 데이터를 읽어와 새로운 ClockRelations 객체를 생성해야 합니다.
    • 클래스 메서드로 정의함으로써, cls(data['clocks'])를 호출하여 ClockRelations 클래스의 인스턴스를 생성할 수 있습니다. 이 때, 클래스가 변경되더라도 해당 메서드는 여전히 작동합니다.
  2. 유연한 메서드 호출:

    • 클래스 메서드는 클래스 자체에서 호출할 수 있으며, 이는 일반적인 인스턴스 메서드와 달리 특정 인스턴스에 의존하지 않습니다.
    • 예를 들어, ClockRelations.import_from_file('filename.json')와 같이 클래스 이름을 사용하여 직접 호출할 수 있습니다.

작동 방식

  1. 파일 읽기:

    • filename 매개변수로 전달된 JSON 파일을 읽어옵니다.
    • json.load(f)를 사용하여 파일 내용을 파이썬 딕셔너리로 변환합니다.
  2. 객체 생성:

    • cls(data['clocks'])를 호출하여 ClockRelations 클래스의 새로운 인스턴스를 생성합니다. 이 때, data['clocks']는 JSON 파일에서 읽어온 클럭 리스트입니다.
  3. 데이터 설정:

    • obj.relations에 JSON 파일에서 읽어온 관계 데이터를 설정합니다. 키는 frozenset(eval(key))를 사용하여 frozenset로 변환하고, 값은 그대로 유지합니다.
    • obj.aliases에 JSON 파일에서 읽어온 별명 데이터를 설정합니다.
  4. 객체 반환:

    • 최종적으로 설정된 객체를 반환합니다.

예제

# JSON 파일에서 ClockRelations 객체를 생성
new_clock_relations = ClockRelations.import_from_file('clock_relations.json')

이 예제에서는 import_from_file 메서드를 사용하여 clock_relations.json 파일에서 데이터를 읽어와 새로운 ClockRelations 객체를 생성합니다.

클래스 메서드를 사용함으로써, 객체를 생성하지 않고도 클래스 자체에서 이 메서드를 호출하여 파일로부터 데이터를 쉽게 불러올 수 있습니다.

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.