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

環境

  • Windows 10
  • Python 3.10.1
  • VSCode

使用するソースコード

以下の公開リポジトリに置いています

GitHub - masayan1126/tao-py-py: 作業自動化用 Python ライブラリ
作業自動化用 Python ライブラリ. Contribute to masayan1126/tao-py-py development by creating an account on GitHub.

結論

早速結論からですが、該当のクラスのインスタンス変数(メンバ変数)と同名のメソッドを実装すると表題のエラーが生じます

例えば、以下のように、メンバ変数の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学習におすすめの書籍

独習Python/山田祥寛【3000円以上送料無料】
bookfan 1号店 楽天市場店
¥ 3,300(2023/01/31 18:22時点)
タイトルとURLをコピーしました