Python kaynak kodunu nasıl düzenlemeliyim? [kapalı]


99

Python ile başlıyorum (bir şans vermenin tam zamanı) ve bazı en iyi uygulamaları arıyorum.

İlk projem, birden çok iş parçacığında komut satırı deneyleri çalıştıran bir kuyruk. Çok uzun bir main.pydosya almaya başladım ve onu bölmek istiyorum. : Genel olarak, ben arıyorum Nasıl piton programcıların birkaç kaynak dosyaları organize? Sizin için çalışan belirli bir yapı var mı?

Özel sorularım şunları içerir:

  1. Her sınıf ayrı bir dosyada mı olmalı?
  2. Kaynak koduna göre birim testlerini nasıl organize etmeliyim?
  3. Doküman yorumlarını, özellikle komut satırı işlemi için olanları nereye koymalıyım?
  4. Birden çok dizin kullanırsam, aralarında sınıfları nasıl içe aktarırım?

Muhtemelen burada deneme yanılma yoluyla kendi sonuçlarımdan bazılarını çıkarabilirim, ancak iyi bir şeyden başlamayı tercih ederim .


4
Bu, kodunuzu düzenlemeyle ilgili birkaç şeyi açıklayacaktır docs.python.org/tutorial/modules.html
Nikola Smiljanić

2
İşte python belgelerinden bazı daha yararlı bilgiler. <br> docs.python.org/3/tutorial/modules.html#packages
rda3mon

11
Bu soru, özellikle Python topluluğunda geniş kabul görmüş bir kongre arayışı içindedir. Cevap bir fikir meselesi değildir, ancak çoğu cevap gibi zamanla değişebilir. Bunun yeniden açılmasını veya en azından orijinal cevabın silinmemesini öneririm.
Andres Jaan Tack

Yanıtlar:


32

Makale Eric işaret o büyük Python kod üsleri organize ayrıntılarını kapsar çünkü müthiş için.

Buraya Google'dan geldiyseniz ve bir büyük kaynak dosyayı birden çok, daha yönetilebilir dosyaya nasıl böleceğinizi bulmaya çalışıyorsanız, süreci kısaca özetleyeceğim.

Şu anda bir dosyada her şeyin bulunduğunu varsayalım main.py:

  • Aynı klasörde başka bir kaynak dosya oluşturun ( utils.pybu örnek için bizimkini arayalım )
  • İhtiyaç duyduğunuz sınıfları, işlevleri, ifadeleri vb main.py.utils.py
  • En main.pyüste tek bir satır ekleyin:import utils

Kavramsal olarak bunun yaptığı şey utils, başka bir kaynak dosyada çağrılan yeni bir modül oluşturmaktır . Daha sonra ihtiyaç duyulan her yere içe aktarabilirsiniz.


Eric'in işaret ettiği makaleyi hatırlıyor musun? Bu soru / cevapta Eric'i bulamıyorum
Daniel Rucci

7
@DanR, evet, makale bu . Bazı nedenlerden dolayı bir moderatör 56 olumlu oy almasına rağmen cevabını sildi.
Drew Noakes

1
@DrewNoakes: Yalnızca bağlantı içeren bir yanıt olduğu için silindiğini düşünüyorum; keşke makalenin ana noktalarını özetleseydi.
smci

1
Maalesef makale şu anda ölü bir bağlantıdır :-(. Arşivlenen en son sürüm burada: web.archive.org/web/20190714164001/http://…
Igor Brejc

7

Kodunuzu ve testlerinizi düzenleme şekliniz, herhangi bir OO dili için yaptığınızla tamamen aynıdır.

Benim yaptığım şekilde cevaplar. Doğru olmayabilir ama benim için çalışıyor

  1. İşlevselliğinizin nasıl bölündüğüne bağlıdır. Ana python uygulamam için giriş noktaları için sınıfları ve ardından farklı işlevsellik parçalarını içeren 1 dosyam var
  2. Tutulma için PyDev kullanıyorum ve Java için yaptığım gibi düzenliyorum.
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
  1. Her şeyi takip etmek için DocString'i her yerde kullanın
  2. İlgili __init__.pydosyaların klasörlerde olduğundan emin olduktan sonra . bu sadece basit bir durumfrom module import class

5
Yine de bir uyarı: java, paketler, dosyalar ve sınıflarla bir tür diktatörce ilişki kurar. Bazen gerçekten istediğimden çok daha fazla kaynak dosyaya sahip oluyorum. Bazı kuruluşların kuralları - örneğin - dosyada daha düşük olan (iç içe geçmiş) iç sınıflardan veya "yardımcı" sınıflardan kaçının - bunu derleyicinin gereksinimlerinin ötesinde daha da kötüleştirir. Düzenli tutun ve bir hiyerarşi kullanışlıdır, ancak iş yapmaktan kaçınmaya çalışın.
Roboprog
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.