SORU
13 ŞUBAT 2009, Cuma


Nasıl dinamik olarak bir Python sınıf yük

Bir Python sınıf bir dizgide, my_package.my_module.MyClass örneğin, ne yüklemek için mümkün olan en iyi yolu nedir?

Diğer bir deyişle Python eşdeğer bir Java fonksiyonu Class.forName() arıyorum. Google App Engine üzerinde çalışmak gerekiyor.

Tercihen bu bir dize olarak sınıfın FQN kabul eder, ve bu sınıf için bir başvuru döndüren bir fonksiyon olurdu

my_class = load_class('my_package.my_module.MyClass')
my_instance = my_class()

CEVAP
13 ŞUBAT 2009, Cuma


Python belgelerine, burada istediğiniz işlev:

def my_import(name):
    components = name.split('.')
    mod = __import__(components[0])
    for comp in components[1:]:
        mod = getattr(mod, comp)
    return mod

__import__ işe yaramaz bir paket ve basit bir dize ilk nokta son bir şey alma sebebinin aldığınız modülün bir niteliktir. Böylece, bir şey yok gibi

__import__('foo.bar.baz.qux')

Yukarıdaki gibi fonksiyonu " diyebilirsiniz

my_import('foo.bar.baz.qux')

Veya örnek:

klass = my_import('my_package.my_module.my_class')
some_object = klass()

EDİTBu kapalı bir şey değildim. Temel olarak yapmak istediğin şey:

from my_package.my_module import my_class

Yukarıdaki işlev, eğer var ise gereklidirboşfromlist. Böylece, uygun bir çağrı gibi olacaktır:

mod = __import__('my_package.my_module', fromlist=['my_class'])
klass = getattr(mod, 'my_class')

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GirlSanctuaryBlog

    GirlSanctuar

    28 Aralık 2011
  • Paul Schroder

    Paul Schrode

    30 Kasım 2007
  • thelonelyisland

    thelonelyisl

    23 Aralık 2005