Pythonでクラスやオブジェクトを扱っていると、よく obj.name
や obj.method()
のように「ドット(.)」を使うコードに出会います。
なんとなく見よう見まねで使っていたのですが、「そもそもこのドットは何をしているんだろう?」と気になったので、学習の記録として整理してみました。
ドット(.)の基本的な役割
Pythonにおけるドット(.)は、オブジェクトの中にあるもの(属性やメソッド)にアクセスする記号です。
obj.名前
このように書くと、「objの中にある名前(変数・関数など)」を取り出すことになります。
属性へのアクセス(変数)
obj.変数名
これは、オブジェクトが持っているデータ(属性)にアクセスしているということになります。
例:インスタンス変数のアクセス
class User:
def __init__(self, name):
self.name = name
u = User("Gaku")
print(u.name) # Gaku
u.name
という書き方で、u
の持つ name
属性にアクセスしています。
メソッドの呼び出し(関数)
obj.関数名()
これは、オブジェクトが持っている処理(関数)を呼び出すという意味になります。
例:メソッドの呼び出し
class User:
def greet(self):
print("こんにちは!")
u = User()
u.greet() # こんにちは!
ドットのあとに ()
がついているので、これは関数の呼び出しであることがわかります。
補足:() をつけずに関数を渡す(コールバックとしての利用)
関数やメソッドは ()
をつけないことで「呼び出す」のではなく、「関数オブジェクトを取り出す」ことができます。
例えば、他の関数に引数として渡し、あとで呼び出すという使い方が可能です。
これを「コールバック」と呼びます。
例:メソッドをコールバックとして渡す
class User:
def greet(self):
print("こんにちは!")
def func(callback):
callback() # ここで実行される
u = User()
func(u.greet) # () はつけない → 関数オブジェクトを渡している
このように、u.greet
を ()
をつけずに func
に渡すことで、
関数内で後から callback()
として呼び出すことができます。
※ ()
をつけてしまうと、その場で実行されてしまい、「関数を渡す」ことができなくなる点に注意です。
プロパティのアクセス(処理付きの値)
obj.プロパティ名
見た目は変数と同じですが、裏では処理(関数)が実行されている場合があります。
これは @property
を使ったときの挙動です。
例:@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
c.area
は関数で計算していますが、呼び出すときは ()
をつけません。
値っぽく見せたいときにプロパティが使われると理解しました。
ドットでアクセスできるものまとめ
書き方 | 意味 | 例 |
---|---|---|
obj.変数 |
属性(データ)にアクセス |
u.name , c.radius
|
obj.関数() |
メソッド(処理)を呼び出す |
u.greet() , d.bark()
|
obj.プロパティ |
値っぽく見えるけど実は関数 |
c.area , p.age
|
変数と関数の見分け方
初心者の自分としては、ドットのあとが変数なのか関数なのかでよく迷いました。
自分なりに整理した見分け方は以下の通りです。
-
()
がない → 変数 or プロパティ -
()
がある → 関数(メソッド) - 実際にプロパティかどうかは定義を見ないとわからない
例:
print(user.name) # → 変数またはプロパティ
print(user.get_age()) # → 関数(メソッド)
まとめ
- ドットは「オブジェクトの中身(属性や関数)にアクセスするための記号」
-
obj.変数
→ データ(属性)にアクセス -
obj.関数()
→ 関数(処理)を実行
(()
をつけないことで、関数を「後から呼ぶために渡す(コールバック)」こともできる) -
obj.プロパティ
→ 値のように見えるけど処理してることもある(@property)
さいごに
Pythonのクラスを学ぶ中で、obj.〇〇
のような表現が頻出するので、
ドットの意味をしっかり整理しておくことはすごく大事だと感じました。
本記事が私と同じようにドットの意味をより理解したい方の役に立てれば幸いです。