인프런 커뮤니티 질문&답변

aorri96님의 프로필 이미지
aorri96

작성한 질문수

실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지

클래스로 클래스를 만드는 메타클래스(Metaclasses)에 대해서 알아보기

python metaclasses vs java reflection

작성

·

291

0

강의를 듣던도중, python metaclasses가, 자바의 reflection과 비슷하다는 느낌을 받았습니다.

질문 :

  • 그렇다면, 메타클래스를 이용해서, 런타임에 동적으로 클래스의 정보를 조작하거나 프록시 객체를 만드는등의 일이 가능한건가요?

답변 1

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 Aorri96님

 

파이썬에서 메타클래스를 사용하면 클래스의 생성 및 동작을 커스터마이즈할 수 있으므로 런타임에 동적으로 클래스의 정보를 조작하거나 프록시 객체를 만드는 등의 작업이 가능합니다. 메타클래스는 클래스의 "클래스"이며, 새로운 클래스를 만들 때 클래스 자체의 동작을 수정할 수 있게 해줍니다.

메타클래스를 정의하려면 다음과 같이 type을 사용하여 클래스를 만듭니다. type은 클래스의 메타클래스이기도 합니다.

class MyMeta(type):
    def __init__(cls, name, bases, attrs):
        # 클래스가 생성될 때 호출됩니다.
        # 여기에서 클래스의 정보를 조작할 수 있습니다.
        super().__init__(name, bases, attrs)

class MyClass(metaclass=MyMeta):
    def __init__(self, value):
        self.value = value

# MyClass 클래스는 MyMeta 메타클래스에 의해 제어됩니다.

메타클래스를 사용하면 클래스의 속성, 메서드, 초기화 과정, 상속 등을 조작할 수 있습니다. 예를 들어 클래스 생성 시 클래스 이름을 변경하거나 메서드를 추가하거나 제거할 수 있습니다.

프록시 객체를 만들 때도 메타클래스를 사용할 수 있으며, 이를 통해 원래 클래스의 동작을 변경하거나 확장할 수 있습니다. 예를 들어, 런타임에 객체의 메서드 호출을 가로채고 추가 로직을 수행하거나, 특정 메서드를 오버라이드하여 수정된 동작을 제공할 수 있습니다.

aorri96님의 프로필 이미지
aorri96

작성한 질문수

질문하기