SORU
2 Mart 2010, Salı


kullanarak __init__.py

Python kullanım senaryoları veya Tasarım hedefleri projelerime __init__.py almıyorum.

Ben bu 'model' aşağıdaki sakladığım dizin (bir paket olarak ifade eder) dosyaları da ifade eder.

  1. __init__.py
  2. meta.py
  3. solrmodel.py
  4. mongomodel.py
  5. samodel.py

__init__.py kullanmanın iki yolu buldum.

  1. *, *, ***9 8 10*kullanılması gereken ortak bir tanımı var. Bu durumda, *model.py tüm sınıflar için temel/ortak bir tanım olarak __init__.py kullanabilir miyim? Bu model/__init__.py ithal etmek zorunda anlamına gelir.

  2. Ya da, __init__.py kendi içinde solrmodel.py, mongomodel.py, samodel.py ithal tanımları sahip olacak ve sınıfların kolay alma sağlar ya da bu şekilde fonksiyon:

    # file: __init__.py
    
    from mongomodel import *
    from solrmodel import *
    from samodel import *
    

    (import * tavsiye edilmez bunun farkındayım ve sadece bir kongre olarak kullanılır)

Yukarıdaki iki senaryo arasında karar veremedim. __init__.py daha fazla kullanım senaryoları vardır ve kullanımını açıklayabilir misiniz?

Python docs paketleri başlatma diyor, ama orada başlatmak için bir paket içinde ne olduğunu anlayamadım.

CEVAP
2 Mart 2010, Salı


Yazıyorum __init__.py dosyaların büyük çoğunluğu birçok paket başlatmak için bir şey yok çünkü boş.

Bir örnekte ben de başlatma olduğunda paket-yükleme süresi okumak istiyorum bir sürü veri bir kez ve için tüm dosyaları, DB, web, say) -- bu durumdaçokhoş onu okurken bir özel işlev paketi __init__.py yerine ayrı bir "başlatma modülü" ve gereğinden alma modülünden her gerçek modülünde paket (boşuna tekrarlayan ve hata eğilimli: bu belli bir durumda hangi güvenerek dile garanti paketi __init__.pypaketin içinde herhangi bir modül belli ki çok daha Pythonic!) daha önce yüklenmiş.

Görüş beton ve yetkili diğer ifadeler için Python standart kütüphane parçası olan farklı yaklaşımlar çeşitli paketler halinde çekilmiş bak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fireflame65

    fireflame65

    27 Mart 2007
  • Palmundo Ec

    Palmundo Ec

    11 HAZİRAN 2009
  • Tina Chen

    Tina Chen

    26 Mayıs 2012