Python 표준 라 이브 러 리 inspect 의 구체 적 인 사용 방법
Doc:이렇게 쓰 세 요.
The inspect module provides several useful functions to help get information about live objects such as modules, classes, methods, functions, tracebacks, frame objects, and code objects.
이 모듈 은 모듈,클래스,방법,기능 등 대상 에 게 유용 한 방법 을 제공 합 니 다.
getargspec(func)
이름 을 가 진 모듈 ArgSpect(args,varargs,keywords,defaults)를 되 돌려 줍 니 다.args 는 함수 위치 매개 변수 이름 목록 이 고 varargs 는*매개 변수 이름 이 며 keywords 는**매개 변수 이름 이 며 defaults 는 기본 매개 변수 값 의 모듈 입 니 다.
사용 중init__매개 변 수 는 인 스 턴 스 속성 을 자동 으로 초기 화 하 는 실천 에서 바이트 코드 대상 의 co 입 니 다.varnames 속성 으로 함수 의 위치 매개 변수 이름 을 가 져 옵 니 다:
def attr_from_locals(locals_dict):
self = locals_dict.pop('self')
code = self.__init__.__func__.__code__
args = code.co_varnames[1:code.co_argcount]
for k in args:
setattr(self, k, locals_dict[k])
class Foo(object):
def __init__(self, name, color, num=1):
x = 1
attr_from_locals(locals())
그리고init__방법 은**특수 매개 변 수 를 사용 하여 임의의 키워드 파 라 메 터 를 받 을 때 상기 코드 는 적용 되 지 않 습 니 다.실행 가능 한 방법 은 바이트 코드 를 사용 하 는 coflags 속성 으로**인자 가 존재 하 는 지 판단 합 니 다.함수 가*args 문법 을 사용 하여 임의의 수량의 위치 파 라미 터 를 받 아들 일 때,coflags 위치 0x 04,**kwargs 문법 을 사용 할 때 위치 0x 08,함수 가 생 성기 일 때 위치 0x 2000,기타 위치 유지:
>>> def foo(x, *args, **kwargv):
pass
>>> foo.__code__.co_varnames
('x', 'args', 'kwargv')
>>> foo.__code__.co_flags & 0x04
4
>>> foo.__code__.co_flags & 0x08
8
inspect 모듈 의 getargspec()방법 은 바로 이 판단 으로 함수 의 특수 한 파 라미 터 를 가 져 옵 니 다.지금 은 쉽게 구 할 수 있 습 니 다init__의**인자:
import inspect
def attr_from_locals(locals_dict):
self = locals_dict.pop('self')
args = inspect.getargspec(self.__init__.__func__).args[1:]
for k in args:
setattr(self, k, locals_dict[k])
keywords = inspect.getargspec(self.__init__.__func__).keywords
if keywords:
keywords_dict = locals_dict[keywords]
for k in keywords_dict:
setattr(self, k, keywords_dict[k])
class Foo(object):
def __init__(self, name, **kwargv):
attr_from_locals(locals())
f = Foo('bar', color='yellow', num=1)
print f.__dict__
결 과 는:
{'color': 'yellow', 'num': 1, 'name': 'bar'}
대상 이 정확하게 초기 화 되 었 습 니 다.getmembers(object[, predicate])
대상 을 포함 하 는 모든 구성원 의(name,value)목록 을 되 돌려 줍 니 다.돌아 오 는 내용 은 대상 의 보다dict__포 함 된 내용 이 많 고 소스 코드 는 dir()를 통 해 이 루어 집 니 다.
predicate 는 선택 할 수 있 는 함수 인자 로 이 함수 에 의 해 True 로 판 단 된 구성원 이 되 돌 아 옵 니 다.
getmodule(object)
정의 대상 모듈 되 돌리 기
getsource(object)
대상 의 원본 코드 를 되 돌려 줍 니 다.
getsourcelines(object)
원 그룹 을 되 돌려 줍 니 다.원 그룹의 첫 번 째 항목 은 대상 소스 코드 줄 의 목록 이 고 두 번 째 항목 은 첫 번 째 줄 소스 코드 의 줄 번호 입 니 다.
ismodule,isclass,ismethod,isfunction,isbuiltin
일련의 대상 유형 을 판단 하 는 방법 은 대부분 isinstance(object,types.Function Type)와 같은 문 구 를 포장 한 함수 이다.
이제 유형 판단 으로 한 가지 방법 을 되 돌 릴 수 있 습 니 다.
class Foo(object):
'''Foo doc'''
def __init__(self, name):
self.__name = name
def getname(self):
return self.__name
inspect.getmembers(Foo, inspect.ismethod)
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.