6가지 방법으로 Python 개체의 메서드 찾기
-
dir
메소드를 사용하여 Python 객체의 메소드 찾기 -
type
함수를 사용하여 Python 객체 유형 찾기 -
id
함수를 사용하여 Python 개체 ID 찾기 -
inspect
모듈을 사용하여 Python 객체의 메서드 찾기 -
hasattr()
메서드를 사용하여 Python 객체 찾기 -
getattr()
메서드를 사용하여 객체 찾기
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 객체를 평가하고 내성을 수행할 수 있습니다.
이 가이드가 도움이 되었다면 공유해 주세요.