Modüller için Python adlandırma kuralları


102

Amacı "uç" adında bir sınıfı tanımlamak olan bir modülüm var. (ve birkaç ilgili sınıf da.) Modülün kendisini nasıl çağırmalıyım? "uç" mu? "nibmodule"? Başka herhangi bir şey?

Yanıtlar:


110

Sadece uç. Uç sınıfını büyük N ile adlandırın. Adlandırma kuralları ve diğer stil önerileri hakkında daha fazla bilgi için Python stil kılavuzu PEP 8'e bakın .


2
Çoğu Python projesi bu kuralı izliyor mu?
Yerleşik

4
Yerleşik türlerin doğru olduğunu gözlemlediniz. Yine de bunlar kesinlikle istisnalardır. Standart kitaplıkta tanımlanan diğer sınıfların çoğu büyük harfle yazılır.
Stephan202

2
Bunun doğru bir gelenek olduğunu düşünmüştüm, ama bunun doğasında bir sorun var, en azından bana öyle geliyor. Diyelim ki adında bir sınıfım var Clientve anlaşılır bir şekilde, sık sık aramak istediğim örneklerini yaparım client. Ancak konvansiyonunuza göre, modül adı olacaktı clientve bu nedenle örneklerime her zaman doğal olmayan bir ad vermek zorunda kalacağım client_instance. Bu problem hakkında ne düşünüyorsunuz?
Ray

3
@Ray Ancak, konvansiyonun modüle bir ad vereceğini söyleyin Client, o zaman sınıf adıyla çakışır Client. Olduğundan sadece 3 olası adlandırma varyantları ( client, Clientya CLIENThep örneklerini, sınıflar, modüllerin veya sabitler ikisi arasında bir çatışma orada olacağım). Modülünüzü sınıftan daha az bir örnek veya sabit olarak adlandırdığınız ve bu nedenle diğer olasılıklar için daha iyi adlandırma kuralı olduğuna inanıyorum. Ayrıca, değişkenler yerine genellikle sınıfları ve sabitleri içe aktardığınız için modüllerden içe aktarmayı daha okunaklı hale getirir.
Ted Klein Bergman

2
Yerleşiklerin küçük harf olmasının nedeni, bunların python yerine C'de uygulandığını ima etmektir.
Har

42

Ben buna nib.py derdim. Ayrıca sınıfa Nib adını verirdim.

Üzerinde çalıştığım daha büyük bir python projesinde, temelde önemli bir sınıfı tanımlayan birçok modülümüz var. Sınıflar büyük harfle başlayarak adlandırılır. Modüller, küçük harfli sınıf gibi adlandırılır. Bu, aşağıdaki gibi ithalata yol açar:

from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs

Biraz Java yöntemini taklit etmeye benziyor. Dosya başına bir sınıf. Ancak ek esneklikle, mantıklıysa, tek bir dosyaya her zaman başka bir sınıf ekleyebilirsiniz.


28

Çözümümün pitonik bakış açısından pek popüler olmadığını biliyorum, ancak sınıf olarak adlandırılan modül ile bir modül-> bir sınıfın Java yaklaşımını kullanmayı tercih ediyorum. Python stilinin arkasındaki sebebi anlıyorum, ancak çok sayıda sınıf içeren çok büyük bir dosyaya sahip olmaktan pek hoşlanmıyorum. Katlanmasına rağmen göz atmakta zorlanıyorum.

Diğer bir neden de sürüm kontrolüdür: büyük bir dosyaya sahip olmak, taahhütlerinizin o dosya üzerinde yoğunlaşma eğiliminde olduğu anlamına gelir. Bu, potansiyel olarak daha yüksek miktarda çatışmanın çözülmesine yol açabilir. Ayrıca kaydetmenizin belirli dosyaları değiştirdiği (dolayısıyla belirli sınıfları içeren) ek günlük bilgilerini de kaybedersiniz. Bunun yerine, hangi değişikliğin yapıldığını anlamak için yalnızca commit yorumu ile modül dosyasında bir değişiklik görürsünüz.

Özetle, python felsefesini tercih ediyorsanız, diğer gönderilerin önerilerine gidin. Bunun yerine java benzeri felsefeyi tercih ediyorsanız, sınıf Uç içeren bir Nib.py oluşturun.


2
Bahsedilen sorunlar, dil veya programlama stilinden değil, editördeki sınırlamalardan ve sürüm kontrol araçlarının kullanımından kaynaklanmaktadır. Dosya başına bir sınıf, kod yapısına zarar verir. spyderGezintiye yardımcı olması için sınıflarınızın bir özetini ve her ikisinde de aynı dosyanın açık olduğu iki bölmeyi görmek için veya benzer bir düzenleyici kullanın . Ayrıca, lütfen PEP8'i okuyun. Python, Python yazmak içindir ve Java için Java'dır, ancak Python Java yazmak için değildir .
Ioannis Filippidis

6
@IoannisFilippidis: Bir modül için tüm sınıfları normalde yönettiğim kod boyutlarında tek bir dosyaya koymak zorunda kalsaydım, dosyayı bile açamazdım, diğer meslektaşlarımla çarpışmalar fırlar ve patronum içeri tükürürdü. yüz (mecazi olarak, bu kadar) önermek için. Tek bir dosya yaklaşımı ölçeklenmez, PEP-8 olsun ya da olmasın.
Stefano Borini

3
@StefanoBorini: PEP8 tek bir dosya yaklaşımı gerektirmez. Modül başına bir sınıf ve (kod birimi) başına bir dosya, çok geniş bir yelpazenin iki uç noktasıdır. Modül başına bir dosya ile yönetilemeyecek kadar büyük dosya boyutları görüyorsanız, belki de bir paketi modüllere ayırma yaklaşımınızı gözden geçirmeyi düşünmelisiniz.
Chintalagiri Shashank

22

uç iyidir. Şüpheniz varsa, Python stil kılavuzuna bakın.

Gönderen PEP 8 :

Paket ve Modül Adları Modüller kısa, tümü küçük harfli adlara sahip olmalıdır. Okunabilirliği artırırsa, modül adında alt çizgiler kullanılabilir. Python paketleri kısa, tamamı küçük harfli adlara sahip olmalıdır, ancak alt çizgi kullanımı tavsiye edilmez.

Modül adları dosya adlarıyla eşlendiğinden ve bazı dosya sistemleri büyük / küçük harfe duyarlı olmadığından ve uzun adların kesilmesi önemlidir, modül adlarının oldukça kısa seçilmesi önemlidir - bu Unix'te bir sorun olmayacaktır, ancak bir kod eski Mac veya Windows sürümlerine veya DOS'a aktarıldığında sorun.

C veya C ++ ile yazılmış bir genişletme modülü, daha yüksek bir seviye (örneğin daha fazla nesne yönelimli) arayüz sağlayan eşlik eden bir Python modülüne sahip olduğunda, C / C ++ modülünün önde gelen bir alt çizgisi (örneğin, _soket) vardır.


1
uhm ... bu midemi bulandırıyor. Paketlerde / modüllerde alt çizgi önekini tamamen farklı bir şey için kullanıyorum (monty python referansı amaçlanmıştır).
Stefano Borini

0

Gönderen PEP-8: Paket ve Modül İsimler :

Modüller kısa, tamamı küçük harfli adlara sahip olmalıdır. Okunabilirliği artırırsa, alt çizgiler modül adında kullanılabilir.

Python paketleri kısa, tamamı küçük harfli adlara sahip olmalıdır, ancak alt çizgi kullanımı tavsiye edilmez.

C veya C ++ ile yazılmış bir genişletme modülü , daha yüksek bir seviye (örneğin daha fazla nesne yönelimli) arayüz sağlayan eşlik eden bir Python modülüne sahip olduğunda, C / C ++ modülünün önde gelen bir alt çizgisi (örneğin, _soket) vardır.


-3

python'daki foo modülü , Java'daki bir Foo sınıfı dosyaya eşdeğer olacaktır

veya

python'daki foobar modülü, Java'daki bir FooBar sınıf dosyasına eşdeğer olacaktır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.