Python'da işlevlere sahip bir modülün veya işlevler içeren bir sınıfa sahip bir modülün tanımlanması daha iyi kabul edilir mi? [kapalı]


12

Kodumda yukarıdaki iki seçenekten biri eşit derecede iyi çalışır ama her iki yaklaşımın da artılarını ve eksilerini bulmakla ilgileniyorum.

Yanıtlar:


9

Dürüst olmak gerekirse ihtiyaçlarınıza bağlıdır. Çoğu zaman bir işlev modülü aradığınız şey olacaktır.

Python sınıfları (imho) C # veya C ++ veya Java'daki sınıflar gibi düşünülmemelidir, bir dizi işlevi daha büyük bir üst öğeye gruplamak için mantıklı bir neden olmalıdır, veri yapıları bunun iyi bir örneği olacaktır, genel amaçlı gevşek toplanmış bir fonksiyonlar grubu yerine doğrudan sınıfa uygulanan uyumlu bir fonksiyonlar grubu.

  • İşlevler Modülü: genel amaçlı, yardımcı program ve daha "global" işlevler
  • Fonksiyon Sınıfı Modülü: benzer ihtiyaçların gruplandırılmış sınıfları, farklı bağlantılı liste veri türleri veya ses işleme fonksiyonları veya farklı ağaç türleri.

Bir modül benzer sistemlerin genel hiyerarşik gruplaması içindir, genellikle tek bir modül altında tüm yardımcı fonksiyonlar, bir diğerinin altındaki tüm veriler, veri katmanım ve daha "üst" tip bir modül altındaki konektörler vardır. Bir modül sadece zihinsel bir gruplama olduğundan, içinde ne tür sistemlerin olduğu (sınıflar veya fonksiyonlar, dürüstçe muhtemelen ikisinin bir karışımı) ve modül altındaki sistemler arasındaki mantıksal bağlantılar hakkında daha azdır.


7
Python sınıfı ve diğer diller arasındaki kontrastı anlamıyorum. Hangi dilde gruplanma mantıklı bir nedeni olmayan fonksiyonları olan bir sınıfa sahip olursunuz?
Guy Sirton

7

Temel soru, modülünüzün / sınıfınızın farklı örneklerine ihtiyacınız olup olmadığıdır . bir python modülü bir singleton gibidir - her zaman aynı nesneye başvurursunuz , örneğin örneklere ihtiyacınız varsa bir sınıfa ihtiyacınız vardır.

Ancak, örneklere ihtiyacınız yoksa "nesnenizi" başlangıç ​​durumuna ayarlamanız gerekebilir. Bu düz bir modülle açıkça mümkün olsa da, başlatma sadece bazı değerleri ayarlamaktan daha karmaşıksa, bir sınıfın __init__okunabilirlik yönteminde kodu başlatma tavsiye ederim .


2
Muhtemelen durumu olan bir şeyden bahsettiğinize değinmeniz gerekebilir, örneğin, küresel değişkenleri olan bir modül ile üye değişkenleri olan bir sınıf. eğer sınıfınızda sadece yöntemler var ama durum yok ise, birden fazla örneğe sahip olmak için çok az neden var
thbusch

3
@thbusch, evet, bu durum ihtiyaç duyulan örneklerde ima edilir .
kr1

Modül ve sınıfa anlamamı sağlayan bir örneğe ihtiyaç duyduğunuzda. Birden fazla araba yapmak gerekiyorsa, o zaman bir sınıf hesap makineleri bir grup yapmak zorunda değilim bir hesap makinesi modülü vs uygun olurdu Ben sadece bu modülden toplama ve çıkarma yöntemleri kullanmanız gerekir.
tazboy
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.