2009-09-30 30 views
9

Python sınıflarımın python konsolunda çalışması için sorun yaşıyorum. Tüm sınıflarımın genel ad alanına otomatik olarak içe aktarılmasını istiyorum, böylece herhangi bir prefix.module.names olmadan bunları kullanabilirim. İşte Python - paket sınıflarını konsol genel ad alanına içe aktarılıyor

projectname/ 
|-__init__.py 
| 
|-main_stuff/ 
    |-__init__.py 
    |-main1.py 
    |-main2.py 
    | 
    |-other_stuff/ 
    |-__init__.py 
    |-other1.py 
    |-other2.py 

Her dosya aynı adı, örneğin bir sınıfını tanımlar ... Ben şimdiye kadar bu var main1.py, Main1 adında bir sınıf tanımlayacaktır.

PYTHONPATH projemizin mutlak yoludur.

Bunun içeren bir piton başlatma dosyası var:

from projectname import * 

Ama bu beni hiç benim sınıfları kullanmasına izin vermez.

ob=Main1() 

ama Main1 Geçerli isim içinde değil, bu yüzden çalışmaz: Bir piton konsolu başlangıç ​​üzerine ben yazabilmek istiyorum.

import main_stuff 

projectname/main_stuff/__init__.py yılında: vb

import other_stuff 
__all__ = ["main1", "main2", "main3"] 

Ve

Ben

projectname/__init__.py yılında ... __init__.py dosyalara bir şeyler ekleyip çalıştı. Ve benim başlangıç ​​dosyasında ekledim: yazmaya Hala var piton konsolu içinde sınıflarını kullanmak

from projectname.main_stuff import * 
from projectname.main_stuff/other_stuff import * 

Ama:

ob=main1.Main1() 

Ben main1. bölümünü ihtiyacım tercih ediyorum. Python konsolunu kullanırken sınıflarımı otomatik olarak global ad alanına nasıl ekleyebileceğimi bilen var mı?

Teşekkürler.

==== DÜZENLEME ====

Benim ihtiyacım sınıf düzeyinde bir paket ithal etmektir

ancak from package import * bana modül düzeyinde her şeyi verir. Böyle bir şey yapmanın kolay bir yolu peşindeyim:

for module in package do: 
    from package.module import * 

==== ben tek tek benim piton başlangıç ​​dosyasına sınıf ithalatı ekleyerek sona erdi

BAŞKA DÜZENLEME ====. Bunu sürdürmenin yükü yüzünden ideal değil, ama istediğimi yapıyor.

from class1.py import Class1 
from class2.py import Class2 
from class3.py import Class3 

cevap

16

Farklı bir içe aktarma biçimi kullanmak istiyorsunuz.projectname/main_stuff/__init__.py yılında

:

import foo 

Geçerli modülünde adı foo tanımlıyorsanız:

from other_stuff import * 
__all__ = ["main1", "main2", "main3"] 

Böyle bir deyimi kullanın

. Daha sonra, foo'daki öğelere ulaşmak için foo.something'u kullanabilirsiniz.

bunu kullanabilirsiniz

: Sen foo tanımlanan bütün isimleri alarak ve (sizin modüle foo gelen isimleri bir kova dökme gibi) Bu modülde bunları tanımlayan

from foo import * 

. "Bir kova isimlerini dökmek" için

+3

+1 –

İlgili konular