Pythonの属性とは

Python,イメージ

AI実装検定のご案内

Pythonにおける「属性」とは、オブジェクトに関連付けられたデータや関数(メソッド)のことを指します。

属性は、.(ドット)記法を使ってアクセスすることができます。

たとえば、object.attributeのような形です。

Pythonの属性には主に以下のような種類があります。

目次

属性の種類(分類)

属性の種類説明
インスタンス属性インスタンス(オブジェクト)ごとに保持するデータ。
クラス属性クラス全体で共有される属性。
メソッド属性関数であり、インスタンスやクラスに結びつけられた振る舞い(処理)を表す。
特殊属性(マジック属性)__init____dict__のように、Pythonが内部で使う特別な属性。

インスタンス属性とは

インスタンス属性は、クラスから生成されたオブジェクトが持つ個別のデータです。

主に__init__()メソッドの中で定義されます。

class Dog:
    def __init__(self, name):
        self.name = name  # ← これがインスタンス属性

dog1 = Dog("Pochi")
dog2 = Dog("Shiro")

print(dog1.name)  # → Pochi
print(dog2.name)  # → Shiro
  • dog1.namedog2.name は、それぞれのインスタンスごとに異なる値を保持しています。

クラス属性とは

クラス属性は、すべてのインスタンス間で共有される属性です。

クラスの定義の中で、関数の外側に記述します。

class Dog:
    species = "Canis familiaris"  # ← クラス属性

    def __init__(self, name):
        self.name = name

dog1 = Dog("Pochi")
dog2 = Dog("Shiro")

print(dog1.species)  # → Canis familiaris
print(dog2.species)  # → Canis familiaris
  • クラス属性はすべてのインスタンスで共通ですが、インスタンスからもアクセス可能です。
  • インスタンスで変更すると、そのインスタンスだけに別の値が設定され、クラス全体の属性とは別物になります。

メソッド属性とは

Pythonでは、関数も属性の一種とみなされます。メソッドもその対象です。

クラスの中に定義される関数は、通常は「メソッド属性」として扱われます。

class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):  # ← メソッド属性
        print(f"{self.name} is barking!")

dog = Dog("Pochi")
dog.bark()  # → Pochi is barking!
  • barkDog クラスのメソッド属性。
  • dog.bark も実は属性の一つであり、関数(メソッド)です。

特殊属性(マジック属性)

Pythonオブジェクトには、__xxx__ という形式の「特殊属性(マジック属性)」が多数あります。

これはPythonの内部動作に関係します。

代表的な例

class Dog:
    def __init__(self, name):
        self.name = name

dog = Dog("Pochi")

print(dog.__class__)  # <class '__main__.Dog'>
print(dog.__dict__)   # {'name': 'Pochi'}
  • __class__:インスタンスが属するクラス。
  • __dict__:オブジェクトの属性を辞書として返す。

属性の取得・設定・削除

Pythonでは組み込み関数を使って、動的に属性を操作することができます。

関数説明
getattr(obj, "attr")指定した属性を取得する
setattr(obj, "attr", value)属性を設定する
hasattr(obj, "attr")属性が存在するかチェックする
delattr(obj, "attr")属性を削除する
class Dog:
    pass

dog = Dog()

setattr(dog, "name", "Pochi")
print(getattr(dog, "name"))  # → Pochi
print(hasattr(dog, "name"))  # → True
delattr(dog, "name")

属性とプロパティの違い

Pythonでは、属性のアクセス方法をカプセル化したい場合、@propertyデコレータを使います。

これにより、属性のように見せつつ、実際にはメソッドで処理することが可能になります。

class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def area(self):
        return 3.14 * self._radius ** 2

c = Circle(5)
print(c.area)  # → 78.5

このように、関数(メソッド)でありながら属性のようにアクセスできます。

まとめ

Python,イメージ
  • 属性とは、オブジェクトに付属する値や関数のこと
  • データ(インスタンス属性・クラス属性)や関数(メソッド)もすべて属性。
  • 特殊属性やプロパティの仕組みにより、柔軟なクラス設計が可能。
  • 属性は object.attribute という形式でアクセス・変更・削除できる。

以上、Pythonの属性についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次