2014-10-23 2 views

답변

0

: 인수없이

는, 현재 로컬 범위에 이름 목록을 반환합니다. 인수를 사용하여 해당 객체에 유효한 속성 목록을 반환하십시오.

구조에
>>> read_file = open('test.txt', 'r') 
>>> dir(read_file) 
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines'] 
+0

음, 'read.txt'에 정의 된 함수가 아닌'read_file' 파일 객체의 속성을 출력하고 있습니다. 질문의 목적 상 Python이어야합니다. 소스 파일. –

0

ast !

import ast 

with open('somefile.py', 'r') as fin: 
    source = fin.read() 

tree = ast.parse(source) 

class FuncFinder(ast.NodeVisitor): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.function_names = [] 


    def visit_FunctionDef(self, node): 
     self.function_names.append(node.name) 
     self.generic_visit(node) 

finder = FuncFinder() 
finder.visit(tree) 
print(finder.function_names) 

복사/붙여 넣기-수있는 작업 데모 (등 다른 기능의 안에 중첩 클래스의 사람들을 포함하여) 우리가 모든 함수 이름을 가져

source = """ 
def foo(): 
    pass 

def bar(): 
    pass 

class FooBar(object): 
    def __init__(self): 
    pass 
""" 

import ast 

tree = ast.parse(source) 

class FuncFinder(ast.NodeVisitor): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.function_names = [] 


    def visit_FunctionDef(self, node): 
     self.function_names.append(node.name) 
     self.generic_visit(node) 

finder = FuncFinder() 
finder.visit(tree) 
print(finder.function_names) # ['foo', 'bar', '__init__'] 

참고. def visit_ClassDef(self, node): pass ...

+0

그것은 빠른 코딩이었습니다. – simonzack

+0

@imonzack - 감사합니다. 그것은 거의 완벽했습니다. 'NodeVisitor.visit'는'self'를 리턴하지 않는다는 것을 밝혀줍니다. (그리고 어떤 이유로 든 항상 필요합니다.) – mgilson