Python의 메타 클래스

Rayven Esplanada 2022년1월22일
Python의 메타 클래스

이 튜토리얼은 Python의 객체 지향 컨텍스트에있는 메타 클래스에 대해 설명합니다.

Python의 메타 클래스

간단히 말해, 메타 클래스는 클래스의 동작을 정의합니다. 일반 클래스는 객체 또는 클래스의 인스턴스가 작동하는 방식을 정의합니다.

파이썬에서 메타 클래스는 미리 만들어져 있고 암시 적입니다. 즉, 클래스를 만들 때 백그라운드에서 메타 클래스가 만들어집니다.

Python의object기본 클래스

Python에서 생성 된 모든 클래스는 기본 클래스object를 암시 적으로 상속합니다. object클래스에는__init____new__와 같은 내장 전용 메서드가 있습니다. 클래스가 자체 필드, 함수 및 속성을 만들기 시작하기 전에object클래스에있는 모든 속성을 상속합니다.

예를 들어,ChildObject라는 새 클래스를 만들어 보겠습니다. 이 클래스에는 단일 속성과 단일 함수의 선언이 있습니다.

class ChildObject:
    num = 1

    def printStatement():
        print("This is a child object.")

ChildObject클래스가object클래스에있는 속성과 함수를 상속하는지 확인하려면 지정된 객체에 정의 된 모든 함수 및 속성 목록을 반환하는dir()함수를 사용합니다.

print(dir(ChildObject))

출력:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'num', 'printStatement']

num속성 및printStatement함수 앞에ChildObject에 명시 적으로 정의되지 않은 개인 속성 및 함수가 상당히 많이 있음을 확인하십시오. 이는 클래스 내에서 암시 적으로 정의되거나object클래스에서 상속됨을 의미합니다.

동일한 함수dir()을 사용하여object클래스의 속성과 함수를 확인하겠습니다.

print(dir(object))

출력:

['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

Python의type메타 클래스

이제object클래스를 다루었으므로 Python의 실제 메타 클래스type에 대해 설명하겠습니다. 다시 말하지만, 메타 클래스는 다른 클래스의 동작을 인스턴스화하고 정의하는 클래스입니다.

두 함수는 주어진 클래스의 메타 클래스를 노출 할 수 있습니다 :type()__class__. 이 두 함수는 모두 주어진 인수의 클래스를 출력합니다.

예를 들어, 위의 예에서 주어진ChildObject클래스에type()__class__함수를 사용하겠습니다.

class ChildObject:
    num = 1

    def printStatement():
        print("This is a child object.")


print(type(ChildObject))
print(ChildObject.__class__)

출력:

<class 'type'>
<class 'type'>

두 함수 모두<class 'type'>을 출력합니다. 이것은ChildObject클래스가type유형임을 나타냅니다. typeChildObject클래스 및 해당 문제에 대한 기타 모든 클래스의 메타 클래스입니다.

요약하면type은 인스턴스화 된 클래스의 동작을 암시 적으로 정의하는 메타 클래스입니다. 이것은 개발자의 간섭없이 코드의 백그라운드에서 수행되기 때문에 상식으로 간주되지 않습니다. 그래서 메타 클래스의 개념은 누군가가 파이썬 소스 코드와 문서를 깊이 파고들 때에 만 알려져 있습니다.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

관련 문장 - Python Class