6가지 방법으로 Python 개체의 메서드 찾기

Sidrah Abdullah 2023년10월10일
  1. dir 메소드를 사용하여 Python 객체의 메소드 찾기
  2. type 함수를 사용하여 Python 객체 유형 찾기
  3. id 함수를 사용하여 Python 개체 ID 찾기
  4. inspect 모듈을 사용하여 Python 객체의 메서드 찾기
  5. hasattr() 메서드를 사용하여 Python 객체 찾기
  6. getattr() 메서드를 사용하여 객체 찾기
6가지 방법으로 Python 개체의 메서드 찾기

Python 프로그래밍에서 Python 개체의 메서드를 동적으로 찾는 기능을 내성이라고 합니다. Python의 모든 것은 객체이기 때문에 런타임에 객체를 쉽게 찾을 수 있습니다.

내장 함수와 모듈을 사용하여 검사할 수 있습니다. 소스 코드를 읽지 않고 정보를 알고 싶을 때 특히 유용합니다.

이 기사에서는 Python 객체의 메소드를 찾는 데 사용할 수 있는 6가지 쉬운 방법을 다룹니다. 자세히 살펴보겠습니다.

dir 메소드를 사용하여 Python 객체의 메소드 찾기

메소드를 찾는 첫 번째 방법은 dir() 함수를 사용하는 것입니다. 이 함수는 객체를 인수로 취하고 해당 객체의 속성 및 메서드 목록을 반환합니다.

이 함수의 구문은 다음과 같습니다.

# python 3.x
dir(object)

예를 들어:

# python 3.x
my_object = ["a", "b", "c"]
dir(my_object)

출력:

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

출력에서 객체의 모든 메서드를 반환했음을 관찰할 수 있습니다.

이중 밑줄로 시작하는 함수를 dunder 메서드라고 합니다. 이러한 메서드를 래퍼 개체라고 합니다. 예를 들어 dict() 함수는 __dict__() 메서드를 호출합니다.

다음과 같은 기본 Vehicle Python 클래스를 만들었습니다.

# python 3.x
class Vehicle:
    def __init__(self, wheels=4, colour="red"):
        self.wheels = wheels
        self.colour = colour

    def repaint(self, colour=None):
        self.colour = colour

이 클래스의 객체를 만들고 dir() 함수를 실행하면 다음 출력을 볼 수 있습니다.

# python 3.x
['__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__', 'colour', 'repaint', 'wheels']

모든 메소드와 해당 속성이 나열되어 있음을 알 수 있습니다. 여기에는 우리가 만든 메서드가 표시되지만 이 클래스의 모든 내장 메서드도 나열됩니다.

또한 callable() 함수를 사용하고 객체를 인수로 전달하여 메서드가 호출 가능한지 확인할 수도 있습니다.

type 함수를 사용하여 Python 객체 유형 찾기

두 번째 방법은 type() 함수를 사용하는 것입니다. type() 함수는 객체의 유형을 반환하는 데 사용됩니다.

type() 함수의 인수에서 모든 개체 또는 값을 전달할 수 있습니다. 예를 들어:

# python 3.x
print(type(my_object))
print(type(1))
print(type("hello"))

그러면 다음 출력이 표시됩니다.

<class 'list'> 
<class 'int'> 
<class 'str'>

type() 함수가 객체의 유형을 반환했습니다.

id 함수를 사용하여 Python 개체 ID 찾기

파이썬에서 객체의 id를 찾기 위해 id() 함수를 사용할 것입니다.

이 함수는 인수로 전달된 모든 개체의 특수 ID를 반환합니다. id는 특정 개체에 대한 메모리의 특별한 위치와 유사합니다.

예를 들어:

# python 3.x
print(id(my_object))
print(id(1))
print(id("Hello"))

다음 명령을 실행한 후에도 유사한 출력을 얻을 수 있습니다.

140234778692576
94174513879552
140234742627312

inspect 모듈을 사용하여 Python 객체의 메서드 찾기

inspect 모듈은 라이브 Python 객체에 대한 정보를 보는 데 사용할 수 있는 또 다른 방법입니다. 이 모듈의 구문은 다음과 같습니다.

# python 3.x
import inspect

print(inspect.getmembers(object))

첫 번째 단계는 inspect 모듈을 가져오는 것입니다. 그런 다음 inspect 모듈에서 getmembers() 함수를 호출하고 객체를 인수로 전달합니다.

예를 들어:

# python 3.x
print(inspect.getmembers(my_object))
print(inspect.getmembers(Vehicle))

위의 예에서 우리는 목록과 Vehicle 클래스의 객체라는 두 개의 객체를 검사했습니다. 코드를 실행한 후 다음과 같은 출력을 얻습니다.

# python 3.x
[('__add__', <method-wrapper '__add__' of list object at 0x7f8af42b4be0>), ('__class__', <class 'list'>), ('__contains__', <method-wrapper '__contains__' of list object at 0x7f8af42b4be0>), ('__delattr__', <method-wrapper '__delattr__' of list object at 0x7f8af42b4be0>), ('__delitem__', <method-wrapper '__delitem__' of list object at 0x7f8af42b4be0>), ('__dir__', <built-in method __dir__ of list object at 0x7f8af42b4be0>), ('__doc__', 'Built-in mutable sequence.\n\nIf no argument is given, the constructor creates a new empty list.\nThe argument must be an iterable if specified.'), ('__eq__', <method-wrapper '__eq__' of list object at 0x7f8af42b4be0>), ('__format__', <built-in method __format__ of list object at 0x7f8af42b4be0>), ('__ge__', <method-wrapper '__ge__' of list object at 0x7f8af42b4be0>), ('__getattribute__', <method-wrapper '__getattribute__' of list object at 0x7f8af42b4be0>), ('__getitem__', <built-in method __getitem__ of list object at 0x7f8af42b4be0>), ('__gt__', <method-wrapper '__gt__' of list object at 0x7f8af42b4be0>), ('__hash__', None), ('__iadd__', <method-wrapper '__iadd__' of list object at 0x7f8af42b4be0>), ('__imul__', <method-wrapper '__imul__' of list object at 0x7f8af42b4be0>), ('__init__', <method-wrapper '__init__' of list object at 0x7f8af42b4be0>), ('__init_subclass__', <built-in method __init_subclass__ of type object at 0x55a6b668d5a0>), ('__iter__', <method-wrapper '__iter__' of list object at 0x7f8af42b4be0>), ('__le__', <method-wrapper '__le__' of list object at 0x7f8af42b4be0>), ('__len__', <method-wrapper '__len__' of list object at 0x7f8af42b4be0>), ('__lt__', <method-wrapper '__lt__' of list object at 0x7f8af42b4be0>), ('__mul__', <method-wrapper '__mul__' of list object at 0x7f8af42b4be0>), ('__ne__', <method-wrapper '__ne__' of list object at 0x7f8af42b4be0>), ('__new__', <built-in method __new__ of type object at 0x55a6b668d5a0>), ('__reduce__', <built-in method __reduce__ of list object at 0x7f8af42b4be0>), ('__reduce_ex__', <built-in method __reduce_ex__ of list object at 0x7f8af42b4be0>), ('__repr__', <method-wrapper '__repr__' of list object at 0x7f8af42b4be0>), ('__reversed__', <built-in method __reversed__ of list object at 0x7f8af42b4be0>), ('__rmul__', <method-wrapper '__rmul__' of list object at 0x7f8af42b4be0>), ('__setattr__', <method-wrapper '__setattr__' of list object at 0x7f8af42b4be0>), ('__setitem__', <method-wrapper '__setitem__' of list object at 0x7f8af42b4be0>), ('__sizeof__', <built-in method __sizeof__ of list object at 0x7f8af42b4be0>), ('__str__', <method-wrapper '__str__' of list object at 0x7f8af42b4be0>), ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x55a6b668d5a0>), ('append', <built-in method append of list object at 0x7f8af42b4be0>), ('clear', <built-in method clear of list object at 0x7f8af42b4be0>), ('copy', <built-in method copy of list object at 0x7f8af42b4be0>), ('count', <built-in method count of list object at 0x7f8af42b4be0>), ('extend', <built-in method extend of list object at 0x7f8af42b4be0>), ('index', <built-in method index of list object at 0x7f8af42b4be0>), ('insert', <built-in method insert of list object at 0x7f8af42b4be0>), ('pop', <built-in method pop of list object at 0x7f8af42b4be0>), ('remove', <built-in method remove of list object at 0x7f8af42b4be0>), ('reverse', <built-in method reverse of list object at 0x7f8af42b4be0>), ('sort', <built-in method sort of list object at 0x7f8af42b4be0>)] [('__class__', <class '__main__.Vehicle'>), ('__delattr__', <method-wrapper '__delattr__' of Vehicle object at 0x7f8af813a350>), ('__dict__', {'wheels': 4, 'colour': 'red'}), ('__dir__', <built-in method __dir__ of Vehicle object at 0x7f8af813a350>), ('__doc__', None), ('__eq__', <method-wrapper '__eq__' of Vehicle object at 0x7f8af813a350>), ('__format__', <built-in method __format__ of Vehicle object at 0x7f8af813a350>), ('__ge__', <method-wrapper '__ge__' of Vehicle object at 0x7f8af813a350>), ('__getattribute__', <method-wrapper '__getattribute__' of Vehicle object at 0x7f8af813a350>), ('__gt__', <method-wrapper '__gt__' of Vehicle object at 0x7f8af813a350>), ('__hash__', <method-wrapper '__hash__' of Vehicle object at 0x7f8af813a350>), ('__init__', <bound method Vehicle.__init__ of <__main__.Vehicle object at 0x7f8af813a350>>), ('__init_subclass__', <built-in method __init_subclass__ of type object at 0x55a6b9617e20>), ('__le__', <method-wrapper '__le__' of Vehicle object at 0x7f8af813a350>), ('__lt__', <method-wrapper '__lt__' of Vehicle object at 0x7f8af813a350>), ('__module__', '__main__'), ('__ne__', <method-wrapper '__ne__' of Vehicle object at 0x7f8af813a350>), ('__new__', <built-in method __new__ of type object at 0x55a6b6698ba0>), ('__reduce__', <built-in method __reduce__ of Vehicle object at 0x7f8af813a350>), ('__reduce_ex__', <built-in method __reduce_ex__ of Vehicle object at 0x7f8af813a350>), ('__repr__', <method-wrapper '__repr__' of Vehicle object at 0x7f8af813a350>), ('__setattr__', <method-wrapper '__setattr__' of Vehicle object at 0x7f8af813a350>), ('__sizeof__', <built-in method __sizeof__ of Vehicle object at 0x7f8af813a350>), ('__str__', <method-wrapper '__str__' of Vehicle object at 0x7f8af813a350>), ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x55a6b9617e20>), ('__weakref__', None), ('colour', 'red'), ('repaint', <bound method Vehicle.repaint of <__main__.Vehicle object at 0x7f8af813a350>>), ('wheels', 4)]

hasattr() 메서드를 사용하여 Python 객체 찾기

마지막으로 hasattr() 메서드를 사용하여 Python 개체의 메서드를 찾을 수도 있습니다. 이 함수는 객체에 속성이 있는지 확인합니다.

이 메서드의 구문은 다음과 같습니다.

# python 3.x
hasattr(object, attribute)

이 함수는 객체와 속성이라는 두 가지 인수를 취합니다. 속성이 해당 특정 개체에 있는지 확인합니다.

예를 들어:

# python 3.x
print(hasattr(my_object, "__doc__"))

속성이 존재하는 경우 이 함수는 True를 반환합니다. 그렇지 않으면 False를 반환합니다. 또한 메소드를 찾으면 help() 함수를 사용하여 해당 문서를 볼 수 있습니다.

예를 들어:

# python 3.x
help(object.method)

getattr() 메서드를 사용하여 객체 찾기

hasattr() 메서드와 달리 getattr() 메서드는 특정 Python 객체에 대해 속성이 존재하는 경우 속성의 내용을 반환합니다.

이 함수의 구문은 다음과 같습니다.

# python 3.x
getattr(object, attribute)

예를 들어:

# python 3.x
print(getattr(my_object, "__doc__"))

출력:

Built-in mutable sequence.

If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.

출력에서 속성이 존재한다는 것이 분명합니다. 따라서 이 방법의 작동 방식에 대한 세부 정보와 함께 내용을 반환했습니다.

지금까지 객체 인트로스펙션을 수행하는 몇 가지 방법을 살펴보았습니다. 즉, Python 객체의 메서드와 속성을 5가지 방식으로 나열했습니다.

이 기사를 따르면 Python 객체를 평가하고 내성을 수행할 수 있습니다.

이 가이드가 도움이 되었다면 공유해 주세요.

관련 문장 - Python Object