Python getattr() 関数
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
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
コード解説:
- getattr() はドット記号でのアクセスと同じ効果があります。
- 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}")
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')}")
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の動的プログラミングにおいて非常に重要な関数です。
その他の拡張