파이썬 클래스에서 메소드 목록을 어떻게 얻습니까?
클래스의 메소드를 반복하거나 존재하는 메소드에 따라 클래스 또는 인스턴스 객체를 다르게 처리하려고합니다. 클래스 메소드 목록은 어떻게 얻습니까?
참조 :
- 파이썬 2.5 모듈에서 메소드를 어떻게 나열합니까?
- Python / IronPython 객체 메소드를 통한 반복
- 객체가 가지고있는 메소드 찾기
- 파이썬 객체를 어떻게 보나요?
- Python 2.x에서 객체를 어떻게 검사합니까?
- 객체의 메소드와 속성의 전체 목록을 얻는 방법?
- 파이썬의 클래스 인스턴스에서 사용할 수있는 함수를 찾으십니까?
예제 ( optparse.OptionParser
클래스 의 메소드 나열 ) :
>>> from optparse import OptionParser
>>> import inspect
>>> inspect.getmembers(OptionParser, predicate=inspect.ismethod)
[([('__init__', <unbound method OptionParser.__init__>),
...
('add_option', <unbound method OptionParser.add_option>),
('add_option_group', <unbound method OptionParser.add_option_group>),
('add_options', <unbound method OptionParser.add_options>),
('check_values', <unbound method OptionParser.check_values>),
('destroy', <unbound method OptionParser.destroy>),
('disable_interspersed_args',
<unbound method OptionParser.disable_interspersed_args>),
('enable_interspersed_args',
<unbound method OptionParser.enable_interspersed_args>),
('error', <unbound method OptionParser.error>),
('exit', <unbound method OptionParser.exit>),
('expand_prog_name', <unbound method OptionParser.expand_prog_name>),
...
]
getmembers
2- 튜플 목록 을 반환합니다. 첫 번째 항목은 멤버의 이름이고 두 번째 항목은 값입니다.
인스턴스를 getmembers
다음으로 전달할 수도 있습니다 .
>>> parser = OptionParser()
>>> inspect.getmembers(parser, predicate=inspect.ismethod)
...
거기입니다 dir(theobject)
목록의 모든 필드와 (튜플)를 개체의 메서드에 대한 방법과는 ( "" "에서) 자신의 의사와 필드와 방법을 나열 (codeape 쓰기로) 모듈을 검사합니다.
파이썬에서 모든 필드 (짝수 필드)가 호출 될 수 있기 때문에 메소드 만 나열하는 내장 함수가 있는지 확실하지 않습니다. 통과 하는 객체dir
가 호출 가능한지 여부를 시도 할 수 있습니다 .
외부 라이브러리가없는 Python 3.x 답변
method_list = [func for func in dir(Foo) if callable(getattr(Foo, func))]
던더 제외 결과 :
method_list = [func for func in dir(Foo) if callable(getattr(Foo, func)) and not func.startswith("__")]
속성을 사용해보십시오 __dict__
.
list class와 관련된 모든 메소드를 알고 싶다고 가정하십시오.
print (dir(list))
위의 목록 클래스의 모든 방법을 제공합니다
유형에서 FunctionType을 가져 와서 다음과 같이 테스트 할 수도 있습니다 class.__dict__
.
from types import FunctionType
class Foo:
def bar(self): pass
def baz(self): pass
def methods(cls):
return [x for x, y in cls.__dict__.items() if type(y) == FunctionType]
methods(Foo) # ['bar', 'baz']
상속 된 (그러나 재정의되지는 않은) 기본 클래스의 메소드가 결과에 포함되는지 여부를 고려해야합니다. dir()
및 inspect.getmembers()
작업은 기본 클래스 메소드를 포함 할 수 있지만, 사용 __dict__
속성은하지 않습니다.
이것은 또한 작동합니다 :
mymodule.py
def foo(x)
return 'foo'
def bar()
return 'bar'
다른 파일에서
import inspect
import mymodule
method_list = [ func[0] for func in inspect.getmembers(mymodule, predicate=inspect.isroutine) if callable(getattr(mymodule, func[0])) ]
산출:
['foo', 'bar']
파이썬 문서에서 :
inspect.isroutine (객체)
Return true if the object is a user-defined or built-in function or method.
def find_defining_class(obj, meth_name):
for ty in type(obj).mro():
if meth_name in ty.__dict__:
return ty
그래서
print find_defining_class(car, 'speedometer')
파이썬 페이지 210 생각
methods = [(func, getattr(o, func)) for func in dir(o) if callable(getattr(o, func))]
같은 목록을 제공합니다
methods = inspect.getmembers(o, predicate=inspect.ismethod)
그렇습니다.
나는 이것이 오래된 게시물이라는 것을 알고 있지만 방금이 기능을 작성했으며 누군가가 답을 찾고 넘어지는 경우입니다.
def classMethods(the_class,class_only=False,instance_only=False,exclude_internal=True):
def acceptMethod(tup):
#internal function that analyzes the tuples returned by getmembers tup[1] is the
#actual member object
is_method = inspect.ismethod(tup[1])
if is_method:
bound_to = tup[1].im_self
internal = tup[1].im_func.func_name[:2] == '__' and tup[1].im_func.func_name[-2:] == '__'
if internal and exclude_internal:
include = False
else:
include = (bound_to == the_class and not instance_only) or (bound_to == None and not class_only)
else:
include = False
return include
#uses filter to return results according to internal function and arguments
return filter(acceptMethod,inspect.getmembers(the_class))
class CPerson:
def __init__(self, age):
self._age = age
def run(self):
pass
@property
def age(self): return self._age
@staticmethod
def my_static_method(): print("Life is short, you need Python")
@classmethod
def say(cls, msg): return msg
test_class = CPerson
# print(dir(test_class)) # list all the fields and methods of your object
print([(name, t) for name, t in test_class.__dict__.items() if type(t).__name__ == 'function' and not name.startswith('__')])
print([(name, t) for name, t in test_class.__dict__.items() if type(t).__name__ != 'function' and not name.startswith('__')])
산출
[('run', <function CPerson.run at 0x0000000002AD3268>)]
[('age', <property object at 0x0000000002368688>), ('my_static_method', <staticmethod object at 0x0000000002ACBD68>), ('say', <classmethod object at 0x0000000002ACF0B8>)]
귀하의 방법이 "정규적인"방법이고 statimethod
, classmethod
등
이 아닌 경우 내가 생각해 낸 약간의 핵이 있습니다-
for k, v in your_class.__dict__.items():
if "function" in str(v):
print(k)
if
조건 에 따라 "기능"을 변경하여 다른 유형의 방법으로 확장 할 수 있습니다 .
파이썬 2.7에서 테스트되었습니다.
파이썬 클래스의 메소드 만 나열하려면
import numpy as np
print(np.random.__all__)
참고 URL : https://stackoverflow.com/questions/1911281/how-do-i-get-list-of-methods-in-a-python-class
'IT' 카테고리의 다른 글
JVM에서 프록시를 사용하도록 설정하는 방법 (0) | 2020.03.21 |
---|---|
LINQ의 평평한 목록 (0) | 2020.03.21 |
Flask를 사용하여 URL에서 명명 된 매개 변수를 얻으려면 어떻게해야합니까? (0) | 2020.03.21 |
단일 RSpec 테스트를 실행하는 방법은 무엇입니까? (0) | 2020.03.20 |
루비에 실제 멀티 스레딩이 있습니까? (0) | 2020.03.20 |