Python getattr() 関数

Python3 組み込み関数


getattr()Pythonでオブジェクトの属性値を取得するための組み込み関数です。

getattr()ドット記号(.)を使用した静的アクセスではなく、オブジェクトの属性を動的にアクセスすることを可能にします。これは未知の属性を扱う場合に非常に便利です。

単語の意味: getattr 是 get attribute(获取属性)的缩写。


基本構文とパラメータ

構文形式

getattr(object, name)
getattr(object, name, default)

引数の説明

  • 引数 object:
    • 型:任意のオブジェクト
    • 説明:属性を取得するオブジェクト。
  • 引数 name:
    • 型:文字列
    • 説明:属性名。
  • 引数 default(省略可能):
    • 型:任意の値
    • 説明:属性が存在しない場合に返すデフォルト値。

関数の説明

  • 戻り値:属性の値を返します。
  • 例外:属性が存在せず、デフォルト値もない場合は、AttributeError が発生します。

例

例1:基本的な使い方

例

class Person:
    def __init__(self):
        self.name = "Tom"
        self.age = 20

p = Person()

# 属性を取得
print(getattr(p, "name"))   # 出力: Tom
print(getattr(p, "age"))    # 出力: 20

# ドットを使用
print(p.name)               # 出力: Tom

期待される実行結果:

Tom
20
Tom

コード解説:

  1. getattr() はドット記号でのアクセスと同じ効果があります。
  2. getattr() の利点は、文字列で属性名を指定できることです。

例2:デフォルト値を使用する

例

class Person:
    def __init__(self):
        self.name = "Tom"

p = Person()

# 存在する属性を取得
print(getattr(p, "name", "未知"))  # 出力: Tom

# 存在しない属性を取得(デフォルト値あり)
print(getattr(p, "age", 0))        # 出力: 0
print(getattr(p, "city", "北京"))  # 出力: 北京

# 存在しない属性を取得(デフォルト値なし)
try:
    print(getattr(p, "gender"))
except AttributeError as e:
    print(f"属性が存在しません: {e}")

期待される実行結果:

Tom
0
北京
属性不存在: 'Person' object has no attribute 'gender'

コード解説:

  • 3番目の引数がデフォルト値を提供し、例外を回避します。
  • これはオプションの属性を扱うときに役立ちます。

例3:動的アクセス

例

# 動的に属性を選択
data = {"name": "Tom", "age": 20}
field = "name"
print(getattr(data, field))  # 文字列でアクセス

# setattr と組み合わせる
class Person:
    pass

p = Person()

# 動的に属性を設定
fields = ["name", "age", "city"]
values = ["Tom", 20, "Beijing"]

for field, value in zip(fields, values):
    setattr(p, field, value)

# すべての属性を動的に取得
for field in fields:
    print(f"{field}: {getattr(p, field)}")

# hasattr と getattr を組み合わせる
if hasattr(p, "name"):
    print(f"名前は: {getattr(p, 'name')}")

実行結果:

実際の環境で実行すると、動的に設定された属性が表示されます。

getattr()これはPythonの動的プログラミングにおいて非常に重要な関数です。


Python3 組み込み関数


その他の拡張