LoginSignup
8
6

More than 5 years have passed since last update.

クラス定義の外でもメソッドは定義できる

Posted at

Pythonのメソッドは普通は次のようにクラス定義の中でdef文を記述して定義します。(コードは全てPython3です。)

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

    def print_name(self):
        print(self.name)

# Fooのインスタンスを作成
foo = Foo('foo') 

ですが、クラスを定義した後に普通の関数をクラスの外に書いて、その関数をクラスの属性にセットすることでも定義することができます。この方法で、上記のprint_nameメソッドをクラスの外で定義した場合、次のようになります。

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

# Barのインスタンスを作成
bar = Bar('bar')

def print_name(self):
    print(self.name)

Bar.print_name = print_name

foobarprint_nameの動作と型を比較してみると、次のように出力されます。

>>> foo.print_name()
foo
>>> bar.print_name()
bar
>>> foo.print_name
<bound method Foo.print_name of <__main__.Foo object at 0x03C83610>>
>>> bar.print_name
<bound method Bar.print_name of <__main__.Bar object at 0x042F5D10>>

fooでもbarでもprint_nameの型はbound methodとなっていて、関数で定義してもクラス定義の中で定義する場合と全く同じようにメソッドが定義できることが分かります。

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6