我對某些代碼運行pylint,並收到錯誤「太少的公共方法(0/2)」。這個消息是什麼意思?該pylint docs也沒有什麼幫助:pylint的「太少的公共方法」消息意味着什麼
時使用類有太少的公共方法,所以可以肯定的,它是值得的。
我對某些代碼運行pylint,並收到錯誤「太少的公共方法(0/2)」。這個消息是什麼意思?該pylint docs也沒有什麼幫助:pylint的「太少的公共方法」消息意味着什麼
時使用類有太少的公共方法,所以可以肯定的,它是值得的。
錯誤基本上說,類並不意味着只是存儲數據,因爲你基本上是治療類作爲字典。類應該至少有幾種方法來處理它們所持有的數據。
如果你的類看起來是這樣的:
class MyClass(object):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
考慮使用一本詞典或是namedtuple
代替。雖然如果一個班級看起來是最好的選擇,那就使用它。 pylint並不總是知道什麼是最好的。
請注意namedtuple
是不可變的,並且在實例化時分配的值不能在以後修改。
+1爲「pylint不知道什麼是最好的」 - 使用你自己的判斷,但作爲一個規則,如果你需要的是一個「結構」,使用「dict」或「namedtuple」。當你想爲你的對象添加一些邏輯時使用一個類(例如,你想要創建時發生的事情,當它添加時需要發生一些特殊的事情,你需要對它執行一些操作,控制它的方式顯示等) –
感謝您的詳細回覆!我的用例與Burhan提到的類似,我在創建時正在對數據進行一些處理。 – monsur
如果您在類定義中有元(metaclass),則此錯誤沒有意義。 – istinspring
如果要擴展一個類,那麼我的建議是系統地禁用此警告,繼續前進,例如,在芹菜任務的情況:
class MyTask(celery.Task): # pylint: disable=too-few-public-methods
"""base for My Celery tasks with common behaviors; extends celery.Task
...
即使你只延伸的單一功能,你絕對需要一個類來使這個技巧發揮作用,並且擴展肯定比黑客入侵第三方類更好!
你的班級是什麼樣的?除了商店數據之外,班級是否還有其他的工作? – Blender
所有的課程都是存儲數據。 – monsur
嗯,這是你的問題。類不是爲了存儲數據。這就是像字典和列表這樣的數據結構。 – Blender