2012-12-25 12 views
58

Bazı kodlarda pylint yaşıyorum ve "Çok az genel yöntem (0/2)" hatasını alıyor. Bu mesaj ne anlama geliyor? pylint docs yardımcı olmadı:pylint'in "Çok az genel yöntem" iletisinin anlamı

Sınıf çok az sayıda genel yönteme sahip olduğunda kullanıldığından emin olun.

+1

Sınıfınız neye benziyor? Sınıf mağaza verileri dışında bir şey yapar mı? – Blender

+1

Tüm sınıf verileri depolar. – monsur

+2

Eh, senin problemin var. Sınıflar veri depolamak anlamına gelmez. Sözlükler ve listeler gibi veri yapıları bunun için. – Blender

cevap

77

hata temelde temelde bir sözlük olarak sınıf davrandığınız olarak sınıflar, sadece veri depolamak anlamına gelmediğini söylüyor. Sınıflar, sahip oldukları veriler üzerinde çalışmak için en az birkaç yönteme sahip olmalıdır.

sınıf bu gibiyse

class MyClass(object): 
    def __init__(self, foo, bar): 
     self.foo = foo 
     self.bar = bar 

bir sözlük ya da yerine namedtuple kullanmayı düşünün. Bir sınıf en iyi seçim gibi görünüyorsa, onu kullanın. pylint her zaman en iyi olanı bilmez.

Not: namedtuple'un değişmez olduğunu ve örneklendirmede atanan değerlerin daha sonra değiştirilemeyeceğini unutmayın. Bir sınıf uzanan varsa

+31

+1 "pylint, neyin en iyi olduğunu bilmiyor" - kendi kararınızı kullanın, ancak bir kural olarak, ihtiyacınız olan bir "struct" ise, bir "dict" veya "namedtuple" kullanın. Nesneye biraz mantık eklemek istediğinizde bir sınıf kullanın (örneğin, oluşturulduğunda bir şeyler olmasını istersiniz, eklendiğinde gerçekleşmesi gereken bazı özel şeylere ihtiyacınız var, üzerinde bazı işlemler yapmak istersiniz. görüntülendi, vb.) –

+0

Ayrıntılı yanıtlar için teşekkürler! Kullanım durumum Burhan'ın bahsettiği şeye benziyor, oluşturulduğunda veri üzerinde işlem yapıyorum. – monsur

+5

Sınıf tanımı içinde Meta (metaclass) varsa, bu hata bir anlam ifade etmez. – istinspring

23

, sonra benim önerim sistematik Kereviz görevleri söz konusu olduğunda, örneğin, bu uyarıyı devre dışı bırakmak ve hareket etmektir: Yalnızca tek bir işlevi uzanan bile

class MyTask(celery.Task): # pylint: disable=too-few-public-methods                     
    """base for My Celery tasks with common behaviors; extends celery.Task 

    ...    

, Bu teknik fonksiyonunu yapmak için kesinlikle bir sınıfa ihtiyacınız var ve uzatma kesinlikle üçüncü taraf sınıflarını kesmekten daha iyidir!

+0

Bu beklemeden ötürü, ön-taahhüt şimdi bana şunu verir: Kötü seçenek değeri 'çok az-kamu-yöntem' (hatalı seçenek değeri) – Mercury

+0

's' yöntemlerini eklediniz mi? Kötü seçenek değer mesajınız buna sahip değil. – sage

+0

Bunu devre dışı bırakmanın daha iyi bir yolu, yapılandırma dosyasının '[BASIC]' bölümünde min-public-methods = 0' değerini ayarlamaktır.Bu, tüm 'disable =' öğelerinizden ('[MESAJ KONTROLÜ'nde]) ayrı bir satıra koymanızı sağlar. Bu, yapılandırma değişikliğiyle birlikte neden etkinleştirildiğinizi ve devre dışı bıraktığınız hakkında ayrıntılı açıklamalar ekleyerek daha kolay bir sonuç verir. –