據我所知,Python(2.5.2)沒有真正支持抽象類。爲什麼pylint抱怨這個類是「抽象類不參考?」它會爲任何有NotImplementedError
的類拋出?是什麼讓pylint覺得我的課是抽象的?
我有自己的文件中的每個類,所以如果是這種情況,我想我別無選擇,只能壓制這條消息,但我希望有可能是另一種方式。
"""Package Repository interface."""
class PackageRepository(object):
"""Package Repository interface."""
def __init__(self):
self.hello = "world"
def get_package(self, package_id):
"""
Get a package by ID.
"""
raise NotImplementedError(\
"get_package() method has not been implemented")
def get_packages(self):
"""
Get all packages.
"""
raise NotImplementedError(\
"get_packages() method has not been implemented")
def commit(self):
"""
Commit all changes.
"""
raise NotImplementedError(\
"commit() method has not been implemented")
def do_something(self):
"""
Doing something.
"""
return self.hello
編輯
也許我應該澄清。我意識到這是一個抽象類,我喜歡使用abstract關鍵字,但據我所知,Python中沒有任何重要的東西(至少在我目前使用的版本中),所以我沒有打擾任何有趣的抽象技巧像那些found here),並簡單地將其排除在外。
我很驚訝地發現,pylint認爲這是一個抽象類的事實。是什麼讓pylint確定這是一個抽象類?它只是在尋找NotImplementedError
被拋出某處嗎?
是什麼讓你說它是**不是**抽象?它確實無法按原樣使用。它爲每個方法函數拋出異常。如果這不是一個例子,那麼「抽象」是什麼意思? – 2009-12-30 19:34:33
令我感到困惑的是,Python不支持抽象類,但是如果在同一個文件中定義了但沒有被引用,pylint會投訴。 它讓我想知道如果我做了什麼錯誤觸發了這個警告。我更喜歡將我的類放在自己的文件中,所以我必然會經常遇到這種情況,並想知道是否有什麼我應該做更多的Pythonic,這將有助於我解決此警告。 – 2009-12-30 19:43:33
@Beau Simensen:你爲什麼專注於每個文件一個類。這非常非Pythonic。事實上,這是你問題的根源。沒有人(尤其不是pylint)期望每個文件一個類。你爲什麼這樣做?請更新你的問題,並解釋你爲什麼這樣做。 – 2009-12-30 19:49:50