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.name
やdog2.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!
bark
はDog
クラスのメソッド属性。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
このように、関数(メソッド)でありながら属性のようにアクセスできます。
まとめ

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