Python でオブジェクトに属性を追加する
Pythonでオブジェクトに属性を追加する方法を紹介します。 また、Python でオブジェクトの属性を変更する方法を例を挙げて紹介します。
Python でオブジェクトに属性を追加する
Python はオブジェクト指向言語であるため、Python では時々オブジェクトを扱います。 オブジェクトは、コーディングを再利用可能にし、複雑な構造を簡単に実装できるようにします。
オブジェクトの主要部分は属性です。 属性は、特定のオブジェクトのプロパティが何であるかを定義します。
オブジェクトを操作しているときに、プログラムの途中でオブジェクトに新しい属性を追加する必要がある場合が多くあります。
Python は、オブジェクトの新しい属性を簡単に設定できる関数 setattr()
を提供します。 この関数は、属性の値を置き換えることさえできます。
これは、オブジェクトの属性の値を割り当てることができる関数です。
このメソッドは、特定のコンストラクターとオブジェクト関数によって変数に値を割り当てる多くの方法を提供します。 この関数を使用することで、値を代入する他の代替方法も使用できるようになります。
それでは、この setattr()
関数の構造について説明しましょう。 setattr()
を構築する構造体を以下に示します。
# python
setattr(object, name, value)
この関数の構文からわかるように、関数に 3つの引数を渡すと、オブジェクトの属性を設定できるようになります。
次のように記述されている 3つのパラメーターがあります。
Object
- 作成したオブジェクトの名前を渡し、属性を設定します。Name
- 値を割り当てたいオブジェクトの属性の名前になります。Value
- ここで属性値を渡します。
生徒のクラスを作成する例を見てみましょう。 以下に示すように、新しい学生を作成し、いくつかの属性を割り当てます。
# python
class Students:
name = "Rana Hasnain"
roll_no = "BC140402269"
cgpa = 3.5
new_student = Students()
setattr(new_student, "name", "James Bond")
setattr(new_student, "roll_no", "007")
setattr(new_student, "cgpa", 4)
print("New Student Name:", new_student.name)
print("New Student Roll #:", new_student.roll_no)
print("New Student Cgpa:", new_student.cgpa)
出力:
上記の例からわかるように、作成したオブジェクトの属性を設定するのは非常に簡単でした。 ここで、別のシナリオについて説明しましょう。
新しいオブジェクトがあり、クラスにない属性を設定したいとしましょう。
場合によっては、属性がないか、すべての属性がクラスに作成されないことがあります。 これが発生すると、新しい属性を割り当て、その値を設定できます。
しかし、それを実現するには、オブジェクトは __dict__()
メソッドを実装する必要があります。 例を見て、存在しない属性に値を割り当ててみましょう。
上記の例を使用して、以下に示すように、新しい属性 degree
を割り当てようとします。
# python
class Students:
name = "Rana Hasnain"
roll_no = "BC140402269"
cgpa = 3.5
new_student = Students()
setattr(new_student, "name", "James Bond")
setattr(new_student, "roll_no", "007")
setattr(new_student, "cgpa", 4)
setattr(new_student, "degree", "BSCS")
print("New Student Name:", new_student.name)
print("New Student Roll #:", new_student.roll_no)
print("New Student Cgpa:", new_student.cgpa)
print("New Student Degree:", new_student.degree)
出力:
上記の例からわかるように、この関数は存在しない新しい属性を作成し、それらに値を割り当てることもできます。
Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.
LinkedIn