Introduction to the Python type class
파이썬에서 class는 class type의 객체입니다. 예를 들어, 다음은 두 가지 메서드 __init__ 및 greeting을 사용하여 Person 클래스를 정의합니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greeting(self):
return f'Hi, I am {self.name}. I am {self.age} year old.'
Person 클래스는 다음 문과 같이 class type의 개체입니다.
print(type(Person))
Output:
<class 'type'>
Person 클래스는 class type의 인스턴스입니다.
print(isinstance(Person, type))
파이썬은 클래스 type를 사용하여 다른 클래스를 만듭니다. class type자체는 호출 가능 클래스입니다.
다음은 type class 생성자 중 하나를 보여 줍니다.
type(name, bases, dict) -> a new type
생성자에는 새 클래스를 만들기 위한 세 개의 매개 변수가 있습니다.
- name : 클래스의 이름(Person).
- bases : 새 클래스의 기본 클래스를 포함하는 튜플(object,).
예를 들어, Person은 object 클래스에서 상속되면 - dict : 클래스 네임 스페이스
기술적으로는 type 클래스를 사용하여 클래스를 동적으로 만들 수 있습니다. 이를 수행하기 전에 Python이 클래스를 만드는 방법을 이해해야합니다.
파이썬 인터프리터가 코드에서 클래스 정의를 발견하면, 다음을 수행합니다:
- class body를 문자열로 추출합니다.
- 클래스 네임스페이스를 위해 클래스 dictionary를 만듭니다.
- 따라서 class body를 실행하여 클래스 dictionary를 채우십시오.
- 위의 type() 생성자를 사용하여 type의 새 인스턴스를 만듭니다.
위의 단계를 에뮬레이트하여 Person 클래스를 동적으로 만들어 보겠습니다.
class_body = """
def __init__(self, name, age):
self.name = name
self.age = age
def greeting(self):
return f'Hi, I am {self.name}. I am {self.age} year old.'
""" # <1>
class_dict = {} # <2>
exec(class_body, globals(), class_dict) # <3>
Person = type('Person', (object,), class_dict) # <4>
# exec() 함수는 class body를 실행하고 전역 및 클래스 네임스페이스를 채웁니다.
# Person 은 클래스이며 객체이기도합니다. Person 클래스는 object 클래스에서 상속되며,
class_dict의 네임스페이스를 갖습니다.
다음은 type 클래스인 Person 클래스의 type을 보여 줍니다.
<class 'type'>
Person은 class type의 인스턴스입니다.
print(isinstance(Person, type))
Output:
True
class_dict는 __init__ , greeting 함수를 갖는다
{'__init__': <function __init__ at 0x0000024E28465160>,
'greeting': <function greeting at 0x0000024E28931550>}
pprint(Person.__dict__)는 다음의 함수를 포함한다.
mappingproxy({'__dict__': <attribute '__dict__' of 'Person' objects>,
'__doc__': None,
'__init__': <function __init__ at 0x00000165F7725160>,
'__module__': '__main__',
'__weakref__': <attribute '__weakref__' of 'Person' objects>,
'greeting': <function greeting at 0x00000165F7F71550>})
# from pprint import pprint 필요
이 예제에서 Python은 코드에서 정적으로 정의하는 것과 동일한 class type를 동적으로 생성합니다.
type 클래스는 다른 클래스를 만들기 때문에 종종 메타 클래스라고 합니다. 메타 클래스는 다른 클래스를 만드는데 사용되는 클래스입니다.
Summary
- 파이썬에서 하나의 클래스는그 class type의 인스턴스입니다.
- type 클래스는 다른 클래스를 생성하므로 메타 클래스라고 합니다.
'Python Object-oriented Programming' 카테고리의 다른 글
Metaclass Example (0) | 2023.04.01 |
---|---|
Metaclass (0) | 2023.04.01 |
Abstract Class (0) | 2023.03.31 |
super() Method (0) | 2023.03.31 |
Static Methods (0) | 2023.03.31 |
댓글