2010-10-01 9 views
53

Tek bir dosyada birden çok genel sınıfın bir araya getirilmesinin iyi nedenleri olsa bile, dosya başına bir genel sınıfa sahip olmanın Java kuralını beğenirim. Benim durumumda aynı arayüzün alternatif uygulamaları var. dosyası (ve modül) isim ve SomeConverter sınıf adı olurduModüller ve/veya paketler içinde Python sınıflarının düzenlenmesi

import someConverter.SomeConverter 

someConverter oysa: Ben ayrı dosyalar halinde koyun olsaydı Ama ithalat tablolara gereksiz adları (veya yanıltıcı modül isimleri) olurdu . Bu benim için oldukça yetersiz görünüyor.

import converters.SomeConverter 

Ama tek modül dosyası içine tüm ilgili sınıfları koyarsanız ben, dosyalar oldukça büyük hale korkuyorlar: Daha anlamlı ithalat beyanı yol açacak bir dosya içine tüm alternatif sınıfları koymak için. Python'un en iyi pratiği nedir? Dosya başına bir sınıf sıra dışı mi?

+7

Eğer 10'000 sınıflardan oluşan bir proje ile uğraşıyoruz zaman, mutlu olacağım bir içeriğini aramak zorunda ll dosyaları .. Java'nın neden dosya başına sadece bir genel sınıf olduğunu ve dosya isminin sınıf adı olması gerektiğini zorunlu kılan mantık budur. –

cevap

55

Birçoğu kişisel tercihtir. piton modüllerini kullanarak, ayrı bir dosyada her sınıf tutmak için bu seçeneği var ve hala import converters.SomeConverter (veya from converters import SomeConverter) izin

şuna benzer olabilir Dosyanız yapısı: sonra

* converters 
    - __init__.py 
    - baseconverter.py 
    - someconverter.py 
    - otherconverter.py 

ve sizin __init__.py dosyası: Python 3.

from baseconverter import BaseConverter 
from otherconverter import OtherConverter 
36

Zach'in çözüm sonları İşte sabit bir çözümdür.

Birçoğu kişisel tercihtir. piton modüllerini kullanarak, ayrı bir dosyada her sınıf tutmak için bu seçeneği var ve hala import converters.SomeConverter (veya from converters import SomeConverter) izin

şuna benzer olabilir Dosyanız yapısı: sonra

* converters 
    - __init__.py 
    - baseconverter.py 
    - someconverter.py 
    - otherconverter.py 

ve sizin __init__.py dosyası: Eğer onun dosyası (ve paketin) adı ile bir (kamu) sınıfı bulmak yerine eğer

from converters.baseconverter import BaseConverter 
from converters.otherconverter import OtherConverter 
+1

Sadece ".baseconverter import BaseConverter'den" ne haber? –

+0

Geç takip için özür dilerim, son zamanlarda python ile iletişim kurmuyorum, eğer birisi yukarıdaki Michael'ın çözümünü doğrulayabilirse, lütfen cevabımı düzenlemekte ve bunu alternatif olarak eklemekten çekinmeyin. (Özgünümü değiştirmeyin, çünkü hangisinin daha okunabilir göründüğüne dair bir tercih meselesi olduğundan, kullanıcılara seçenekleri de sunalım) – Spundun

+6

Michael'ın cevabı işe yarıyor, ancak PEP 8 göreli ithalatı engelliyor. http://stackoverflow.com/questions/4209641/absolute-vs-explicit-relative-import-of-python-module –