Reflection

codakcodak·2023년 10월 19일
0

OOP python

목록 보기
15/19
post-thumbnail
post-custom-banner

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!!
  • function
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={})
profile
숲을 보는 코더
post-custom-banner

0개의 댓글