Masayan tech blog.

  1. ブログ記事一覧>
  2. PythonのTypeError: ‘hoge’ object is not callableが出たときに確認すべきポイント

PythonのTypeError: ‘hoge’ object is not callableが出たときに確認すべきポイント

公開日

環境

  • 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が出たときに確認すべきポイントについて紹介しています。ぜひ参考にしてみてください。