파이썬을 사용하여 파이썬 파일의 클래스 목록을 얻으려고합니다. 몇 가지 검색 후, 나는파이썬 파일의 클래스 목록 얻기
def get_class_from_file(class_obj, file, path='app', exclude=[]):
class_list = []
module = importlib.import_module(path + '.' + file)
for x in dir(module) :
app_cls = getattr(importlib.import_module(path + '.' + file), x)
try :
if app_cls and issubclass(app_cls, class_obj) and app_cls != class_obj and app_cls not in exclude:
class_list.append((file, x))
except TypeError :
pass
return class_list
그러나, 나는 코드가 클래스의 목록을 가져하지 않는 것이 발견에 따라 같이 일 생각 코드를 얻을 수 있지만, 아직 나에게 슈퍼 클래스를 보여주는 유지 파일 내부의 클래스로, 여기에 예를
file_1.py
class A:
pass
class B(A):
pass
file_2.py
class C(B):
pass
class D:
pass
입니다
I은 함수를 호출 할 때 class_list = get_class_from_file (A는 'file_2') I는 결과가 [C]가 될 것이지만, 반환 기대
[C를, B] B로 C
슈퍼 클래스 중 하나 인이 문제를 해결할 수 있도록 도와주세요. 클래스의 최상위 클래스가 아닌 지정된 파일 내부에 클래스가 있어야합니다. 그건 그렇고, 나는 그것을 처음에 고치기 위해 제외를 사용하지만, 그것은 나에게 장기간의 해결책을주지 않는다.
file_2.py에는 'from file_1 import A'가 (가) 있습니다. 그리고 그 다음부터는 A가 file_1과 file_2에 있음을 의미합니다. – RemcoGerlich
@RemcoGerlich 답변이 맞습니다. 저는이 작업이 당신이 생각하는 것처럼 사소한 것은 아니라고 덧붙이고 싶습니다. 'class A : pass'와'B = A'가 있다면 어떨까요? 이 파일에는 두 개의 클래스 또는 하나의 클래스가 있습니까? 클래스 목록에는 속는자가 포함되어 있습니다. 어쩌면 그게 당신이 원하는 것일 수도 있습니다. –
@ ŁukaszRogalski : 그렇습니다. 이미 발견 된 id()를 유지하는 것과 같은 일을하더라도 가장 먼저 A 또는 B를 찾지 못합니다. 하지만 그의 유스 케이스는 그런 문제가 없다는 것입니다. – RemcoGerlich