0Pricing
Python Academy · レッスン

インスタンスメソッドと self

オブジェクト自身のデータを操作するメソッドを記述します。

「インスタンスメソッドと self」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

導入

インスタンスメソッドは、self を使って特定のオブジェクトのデータを操作し、その属性にアクセスしたり変更したりします。

インスタンスメソッドの定義

クラス内の def method(self): はインスタンスメソッドです。オブジェクトを最初の引数(self)として受け取ります。
class Circle:
    def __init__(self, r): self.r = r
    def area(self):
        import math
        return math.pi * self.r**2
print(Circle(5).area())

メソッドの呼び出し

obj.method() は ClassName.method(obj) の糖衣構文です。Pythonが obj を self として自動的に渡します。
class Dog:
    def __init__(self, name): self.name = name
    def bark(self): print(f'{self.name} says Woof!')
Dog('Rex').bark()

selfを返すメソッド

self を返すとメソッドチェーンが可能になります: builder.set_name('x').set_age(3).build()。
class Builder:
    def __init__(self): self.data = {}
    def set(self, k, v):
        self.data[k] = v
        return self
    def build(self): return self.data
result = Builder().set('x',1).set('y',2).build()
print(result)

プライベートメソッド(慣例)

「内部での使用」を示すには _ を先頭に付けます。__ を先頭に付けると名前修飾が行われ、_ClassName__method になります。
class Account:
    def __init__(self, bal): self._bal = bal
    def _validate(self, amount): return amount > 0
    def deposit(self, amount):
        if self._validate(amount):
            self._bal += amount
a = Account(100)
a.deposit(50)
print(a._bal)

メソッドをプロパティとして使う

@property はメソッドを読み取り可能な属性に変換します。アクセス時に括弧は必要ありません。
class Circle:
    def __init__(self, r): self.r = r
    @property
    def diameter(self): return self.r * 2
c = Circle(5)
print(c.diameter)  # no ()

状態の変更

self の属性を変更するメソッドは、オブジェクトの状態を変えます。クエリとコマンドを区別し、意図が明確なメソッドを設計します。
class Stack:
    def __init__(self): self.items = []
    def push(self, x): self.items.append(x)
    def pop(self): return self.items.pop()
    def peek(self): return self.items[-1]
s = Stack()
s.push(1); s.push(2)
print(s.pop(), s.peek())

オブジェクトの比較

デフォルトでは、== は同一性を比較します。値で比較するには __eq__ を実装します。
class Point:
    def __init__(self, x, y): self.x,self.y=x,y
    def __eq__(self, other): return self.x==other.x and self.y==other.y
print(Point(1,2)==Point(1,2))

イテレーションプロトコル

__iter__ と __next__ を実装すると、クラスが反復可能になり、forループで使えるようになります。
class Countdown:
    def __init__(self, n): self.n = n
    def __iter__(self): return self
    def __next__(self):
        if self.n <= 0: raise StopIteration
        self.n -= 1; return self.n + 1
print(list(Countdown(3)))

コンテキストマネージャープロトコル

__enter__ と __exit__ を実装すると、クラスを with 文で使えるようになります。
class Timer:
    def __enter__(self):
        import time
        self.start = time.time()
        return self
    def __exit__(self, *args):
        import time
        print(f'elapsed: {time.time()-self.start:.3f}s')
with Timer(): pass

メソッドと関数

クラスを通してアクセスすると、Dog.bark は単なる関数です。インスタンスを通すと、d.bark は束縛メソッドになり、self があらかじめ設定されます。
class Dog:
    def bark(self): print('woof')
print(type(Dog.bark))
print(type(Dog().bark))

確認問題

メソッドチェーンとは何ですか?また、それを可能にするにはメソッドが何を返す必要がありますか?

復習

インスタンスメソッドは def m(self) の形で定義し、obj.m() として呼び出します。メソッドチェーンには return self を使います。__eq__/__iter__/__enter__/__exit__ はプロトコルを実装します。_ 接頭辞は内部使用を示します。

続けましょう

すばらしいです!次のレッスンに進んで、スキルをさらに伸ばしましょう。

よくある質問

「インスタンスメソッドと self」レッスンは無料ですか?

はい。「インスタンスメソッドと self」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「インスタンスメソッドと self」で何を学びますか?

オブジェクト自身のデータを操作するメソッドを記述します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「インスタンスメソッドと self」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. クラスと __init__ メソッド
  2. インスタンス属性とクラス属性
  3. インスタンスメソッドと self
  4. 特殊メソッド: __str__ と __repr__
← Python Academyに戻る