__subclasses__()
yöntemini kullanarak türetilmiş tüm sınıfları listeleyemiyorum.Python __subclasses __() alt sınıfları listeleme
import.py
backends
__init__.py
--digger
__init__.py
base.py
test.py
--plugins
plugina_plugin.py
import.py
itibaren i test.py
arıyorum: İşte benim dizin düzeni bu. test.py
sırayla plugins
dizinindeki tüm dosyaları yineler ve tümünü yükler. test.py
şuna benzer:
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__()
yöntemi, herhangi bir türetilmiş sınıfları göstermediği sorun bize. plugins
dizindeki tüm eklentiler, base.py
dosyasındaki bir temel sınıftan türetilir.
base.py
class PluginA(BasePlugin):
"""
Plugin A
"""
def __init__(self):
pass
kimse bu konuda bana yardımcı olabilir:
class BasePlugin(object):
"""
Base
"""
def __init__(self):
pass
plugina_plugin.py
Teşekkürler.
'Initialising plugin: plugina_plugin' adlı iletiyi görüyor musunuz? – unutbu
Evet. O açılır. Öyle görünüyor ki sınıf bile içe aktarılıyor ama '__subclasses__' yöntemi bir sebepten dolayı listelemiyor. –
Sorunu yeniden oluşturamadım. basePlugin .__ subclasses __() baskısı, [] 'değerini verir.Belki de dizin yapısını kopyalarsanız ve kodu mümkün olan en basit forma (eğer problem devam ederse her bir değişiklik testi ile) ayrıştırmaya devam ederseniz, bazı orta aşamada sorunun kaynağına dair bir ipucu bulacaksınız. Örneğin, test.py'deki tüm yabancı kodlardan kurtulun, dizin yapısını basitleştirin, import.py'den kurtulun, vs ... –
unutbu