• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

python metaclasses vs java reflection

23.09.25 10:37 작성 조회수 193

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 메타클래스에 의해 제어됩니다.

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

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