__subclasses__()
메소드를 사용하여 모든 파생 클래스를 나열 할 수없는 것 같습니다.Python __subclasses __() 서브 클래스를 나열하지 않음
import.py
backends
__init__.py
--digger
__init__.py
base.py
test.py
--plugins
plugina_plugin.py
이 import.py
에서 내가 test.py
전화 해요 : 여기 내 디렉토리 레이아웃입니다. test.py
은 차례로 plugins
디렉토리에있는 모든 파일을 반복하여 모두로드합니다. test.py
은 다음과 같습니다
import os
import sys
import re
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(os.path.abspath(__file__)))))
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(os.path.abspath(__file__))), 'plugins'))
from base import BasePlugin
class TestImport:
def __init__(self):
print 'heeeeello'
PLUGIN_DIRECTORY = os.path.join(os.path.abspath(os.path.dirname(os.path.abspath(__file__))), 'plugins')
for filename in os.listdir (PLUGIN_DIRECTORY):
# Ignore subfolders
if os.path.isdir (os.path.join(PLUGIN_DIRECTORY, filename)):
continue
else:
if re.match(r".*?_plugin\.py$", filename):
print ('Initialising plugin : ' + filename)
__import__(re.sub(r".py", r"", filename))
print ('Plugin system initialized')
print BasePlugin.__subclasses__()
__subclasses__()
방법은 어떤 파생 클래스가 표시되지 않는 문제 우리. plugins
디렉토리의 모든 플러그인은 base.py
파일의 기본 클래스에서 파생됩니다.
base.py
이
class PluginA(BasePlugin):
"""
Plugin A
"""
def __init__(self):
pass
이 사람이 나를 도울 수 :
class BasePlugin(object):
"""
Base
"""
def __init__(self):
pass
plugina_plugin.py
고마워.
'Initializing plugin : plugina_plugin' 메시지가 보이십니까? – unutbu
예. 팝업. 클래스가 임포트 된 것처럼 보이지만'__subclasses__' 메서드는 어떤 이유로 그것을 나열하지 않습니다. –
문제를 재현하지 못했습니다. 'Print BasePlugin .__ 하위 클래스 __()는'[]'를 산출합니다.아마도 디렉토리 구조를 복사하고 코드를 가능한 가장 단순한 형태로 유지한다면 (문제가 남아있는 경우 각 변경 테스트를 통해) 중간 단계에서 문제의 원인에 대한 단서를 찾을 수 있습니다. 예를 들어, test.py에있는 모든 불필요한 코드를 없애고, 디렉토리 구조를 단순화하고, import.py를 제거하십시오. –
unutbu