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
유형임을 나타냅니다. type
은ChildObject
클래스 및 해당 문제에 대한 기타 모든 클래스의 메타 클래스입니다.
요약하면type
은 인스턴스화 된 클래스의 동작을 암시 적으로 정의하는 메타 클래스입니다. 이것은 개발자의 간섭없이 코드의 백그라운드에서 수행되기 때문에 상식으로 간주되지 않습니다. 그래서 메타 클래스의 개념은 누군가가 파이썬 소스 코드와 문서를 깊이 파고들 때에 만 알려져 있습니다.
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