Reflection
class
"""
인스턴스의 타입을 통해 같은 타입의 인스턴스를 형성할 수 있다.
"""
class User:
pass
user1 = User()
print("User클래스의 인스턴스 user1")
print(user1.__class__)
print(type(user1))
# 1.인스턴스의 클래스정보를 통해 클래스 얻기
clz_type = user1.__class__
print("인스턴스의 클래스 정보를 통한 인스턴스 생성")
user2 = clz_type()
print(user2.__class__)
print(type(user2))
# 2.type메서드를 통해 인스턴스의 클래스 얻기
clz_type = type(user1)
print("type메서드를 통한 인스턴스 생성")
user3 = clz_type()
print(user3.__class__)
print(type(user3))
"""
인스턴스의 메서드를 얻고 인스턴스를 통해 메서드를 실행할 수 있다.
"""
class Person:
def hi(self):
print("hi")
def bye(self):
print("bye")
def nice(self):
print("nice!!")
person1 = Person()
print("Person클래스의 메서드 추출하기")
method_list = [
getattr(Person, func)
for func in dir(person1)
if callable(getattr(Person, func)) and not func.startswith("__")
]
print(method_list)
print("추출한 메서드를 인스턴드를 통해 호출하기")
for method in method_list:
method(person1)
User클래스의 인스턴스 user1
<class '__main__.User'>
<class '__main__.User'>
인스턴스의 클래스 정보를 통한 인스턴스 생성
<class '__main__.User'>
<class '__main__.User'>
type메서드를 통한 인스턴스 생성
<class '__main__.User'>
<class '__main__.User'>
Person클래스의 메서드 추출하기
[<function Person.bye at 0x000001EF9EBDB400>, <function Person.hi at 0x000001EF9EBDB370>, <function Person.nice at 0x000001EF9EBDB490>]
추출한 메서드를 인스턴드를 통해 호출하기
bye
hi
nice!!
import inspect
def test1(a, b=None):
print(b)
print(test1.__code__.co_varnames)
print(test1.__defaults__)
def test2(a, b="example"):
print(b)
print(inspect.getfullargspec(test2))
('a', 'b')
(None,)
FullArgSpec(args=['a', 'b'], varargs=None, varkw=None, defaults=('example',), kwonlyargs=[], kwonlydefaults=None, annotations={})