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

  • Hak5

    Hak5

    7 EYLÜL 2005
  • New Scientist

    New Scientis

    27 Kasım 2006
  • Rachel Talbott

    Rachel Talbo

    26 Ocak 2011