클래스의 메소드를 반복하거나 존재하는 메소드에 따라 클래스 또는 인스턴스 객체를 다르게 처리하려고합니다. 클래스 메소드 목록은 어떻게 얻습니까?
참조 :
답변
예제 ( optparse.OptionParser
클래스 의 메소드 나열 ) :
>>> from optparse import OptionParser
>>> import inspect
#python2
>>> 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>),
...
]
# python3
>>> inspect.getmembers(OptionParser, predicate=inspect.isfunction)
...
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("__")]
답변
list class와 관련된 모든 메소드를 알고 싶다고 가정하십시오.
print (dir(list))
위의 목록 클래스의 모든 방법을 제공합니다
답변
속성을 사용해보십시오 __dict__
.
답변
유형에서 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__
속성은하지 않습니다.