4

現在、パッケージ内のすべての python ファイルのすべての名前と、ファイルに含まれるクラスのすべての名前を表示する python スクリプトを作成しています。

シナリオ

#A.py

class apple:
      .
      .
class banana:
      .
      .

# Extracting_FilesName_className.py

 f=open("c:/package/A.py','r')     
 className=[]
 "Here i need to use some command to get all the class name within the file A.py and append it to className'  

  print file_name,className 

out put A.py,apple,banana

「class」文字列が存在するかどうかを行ごとに確認し、className を取得できる古い慣例の方法を使用できます。しかし、すべてのクラス Name を取得するより良い方法があることを知りたいですか?

4

2 に答える 2

13

このようなもの:

>>> from types import ClassType
>>> import A
>>> classes = [x for x in dir(A) if isinstance(getattr(A, x), ClassType)]

@ user2033511が提案した別の代替案:

>>> from inspect import isclass
>>> classes = [x for x in dir(A) if isclass(getattr(A, x))]
于 2013-06-18T14:49:35.593 に答える
8

ネストされたクラスも検出し、ファイルのインポートを必要としない代替手段:

source = """
class test:
    class inner_class:
        pass
    pass

class test2:
    pass
"""

import ast
p = ast.parse(source)
classes = [node.name for node in ast.walk(p) if isinstance(node, ast.ClassDef)]
# ['test', 'test2', 'inner_class']
于 2013-06-18T15:38:22.463 に答える