Python setattr() 関数
setattr()は、Python でオブジェクトの属性を設定するために使用される組み込み関数です。
ドット記号(.)で直接代入するのとは異なり、setattr()文字列を使用してオブジェクトの属性を動的に設定できます。これは、変数名に基づいて属性を設定したり、未知の属性を処理する必要がある場合に非常に役立ちます。
単語の意味: setattrであるset attribute(属性を設定する)の略語です。
基本構文とパラメータ
構文形式
setattr(obj, name, value)
パラメータの説明
- パラメータ obj:
- 型: 任意のオブジェクト
- 説明: 属性を設定するオブジェクト。
- パラメータ name:
- 型: 文字列
- 説明: 設定する属性名(文字列形式)。
- パラメータ value:
- 型: 任意の値
- 説明: 設定する値。
関数の説明
- 戻り値: 戻り値はありません(返すのは
None)。 - 対応する関数: ~と
getattr()関数と組み合わせて使用し、getattr属性の取得に使用します。
例
例1: 基本的な使い方
例
# シンプルなクラスを作成
class Person:
pass
# オブジェクトを作成
p = Person()
# setattr を使って属性を設定
setattr(p, 'name', 'Tom')
setattr(p, 'age', 20)
setattr(p, 'city', 'Beijing')
# 属性が設定されたことを確認
print(p.name) # 出力: Tom
print(p.age) # 出力: 20
print(p.city) # 出力: Beijing
# getattr を使って属性を取得
print(getattr(p, 'name')) # 出力: Tom
class Person:
pass
# オブジェクトを作成
p = Person()
# setattr を使って属性を設定
setattr(p, 'name', 'Tom')
setattr(p, 'age', 20)
setattr(p, 'city', 'Beijing')
# 属性が設定されたことを確認
print(p.name) # 出力: Tom
print(p.age) # 出力: 20
print(p.city) # 出力: Beijing
# getattr を使って属性を取得
print(getattr(p, 'name')) # 出力: Tom
実行結果の予想:
Tom 20 Beijing Tom
コードの解説:
setattr(obj, 'name', 'Tom')に相当しますobj.name = 'Tom'。- 属性名は文字列として渡されるため、動的に設定できます。
- ~と組み合わせて
getattr()使用できます。
例2: 属性の動的設定
例
class Student:
pass
# 複数の属性を動的に設定する
student = Student()
fields = ['name', 'age', 'grade', 'school']
values = ['Lily', 18, 'A', 'MIT']
for field, value in zip(fields, values):
setattr(student, field, value)
# すべての属性を出力する
for field in fields:
print(f"{field}: {getattr(student, field)}")
# 存在しない属性を設定する
setattr(student, 'major', 'Computer Science')
print(student.major) # 出力: Computer Science
pass
# 複数の属性を動的に設定する
student = Student()
fields = ['name', 'age', 'grade', 'school']
values = ['Lily', 18, 'A', 'MIT']
for field, value in zip(fields, values):
setattr(student, field, value)
# すべての属性を出力する
for field in fields:
print(f"{field}: {getattr(student, field)}")
# 存在しない属性を設定する
setattr(student, 'major', 'Computer Science')
print(student.major) # 出力: Computer Science
実行結果の予想:
name: Lily age: 18 grade: A school: MIT Computer Science
コードの解説:
- ループを使用して複数の属性を動的に設定できます。
- setattr はオブジェクトに新しい属性を追加できます。
- これは設定ファイルやユーザー入力を処理する際に役立ちます。
例3: __dict__ との併用
例
# オブジェクトの __dict__ を表示する
class Car:
def __init__(self):
self.brand = "Toyota"
car = Car()
print(car.__dict__) # 出力: {'brand': 'Toyota'}
# setattr を使用して属性を追加する
setattr(car, 'model', 'Camry')
setattr(car, 'year', 2024)
print(car.__dict__) # 出力: {'brand': 'Toyota', 'model': 'Camry', 'year': 2024}
# 属性が存在するか確認する
if hasattr(car, 'brand'):
print(f"ブランド: {getattr(car, 'brand')}")
class Car:
def __init__(self):
self.brand = "Toyota"
car = Car()
print(car.__dict__) # 出力: {'brand': 'Toyota'}
# setattr を使用して属性を追加する
setattr(car, 'model', 'Camry')
setattr(car, 'year', 2024)
print(car.__dict__) # 出力: {'brand': 'Toyota', 'model': 'Camry', 'year': 2024}
# 属性が存在するか確認する
if hasattr(car, 'brand'):
print(f"ブランド: {getattr(car, 'brand')}")
実行結果の予想:
{'brand': 'Toyota'}
{'brand': 'Toyota', 'model': 'Camry', 'year': 2024}
品牌: Toyota
setattr()通常は~とgetattr()、hasattr()、delattr()一緒に使用して、完全な属性操作ツール群を構成します。
その他の拡張