環境
- Windows 10
- Python 3.10.1
- VSCode
結論
早速結論からですが、該当のクラスのインスタンス変数(メンバ変数)と同名のメソッドを実装すると表題のエラーが生じます。例えば、以下のように、メンバ変数のgetterの名称をget~や別の名称ではなく、メンバ変数の名称をそのまま付与した場合等に生じる可能性があります
shared\Domain\Scraping\xweb_element.py
from selenium.webdriver.remote.webelement import WebElement
from shared.base_class import BaseClass
class XWebElement(BaseClass):
def __init__(self, web_element: WebElement):
self.web_element = web_element
def web_element(self) -> WebElement:
return self._web_element
上記のクラスのオブジェクトを生成し、web_element()を呼び出すと以下のように表題と同じエラーが生じます(メンバ変数に()を付けて呼び出そうとしていると判定されるため)
'WebElement' object is not callable
そのため、インスタンス変数の前にアンダースコアを一つ付与します
from selenium.webdriver.remote.webelement import WebElement
from shared.base_class import BaseClass
class XWebElement(BaseClass):
def __init__(self, web_element: WebElement):
self._web_element = web_element
def web_element(self) -> WebElement:
return self._web_element
Pythonには言語しようとしてアクセス修飾子が使用できませんが、慣習的にアンダースコアで始まる名前 (例えば_xなど)のメンバは、プライベートなメンバとみなすようになっているからです。(※外部からのアクセス自体は可能...)
まとめ
いかがでしたでしょうか。本記事では、PythonのTypeError: ‘hoge’ object is not callableが出たときに確認すべきポイントについて紹介しています。ぜひ参考にしてみてください。