Hatena::Grouppython

nelnal@python

2008-01-29

[] 抽象メソッドを表現する 16:00  抽象メソッドを表現する - nelnal@python を含むブックマーク はてなブックマーク -  抽象メソッドを表現する - nelnal@python

現在のところ*1Pythonではクラスのメソッドを抽象表現する手段は無い。

しかし、調べてみると代わりとなる方法が分かったのでメモ。

参照1
http://newworld.ddo.jp/turky/358
参照2
http://d.hatena.ne.jp/syou6162/20070416/1176671387

どちらの場合でもスーパークラスで何らかの例外を発生させる方法で実装している。


その1

class Abstraction:
    def method(self): abstract

class Implementation(Abstraction):
    pass

inst = Implementation()
inst.method

これを実行すると NameError が発生する。

Traceback (most recent call last):

....

NameError: global name 'abstract' is not defined


その2

「その2」は自作した例外を発生させるパターン

class ExceptionOfImplementation( Exception )

class Abstraction:
    def method(self):
        raise ExceptionOfImplementation

class Implementation( Abstraction ):
    pass

inst = Implementation()
inst.method

これで抽象メソッドの実装を行わなかった時は自作した例外を発生させることで発見できる。


問題点

例外の型を指定しない except 節があると問題が発生しづらくなる可能性がある。

*1:2008/01/29現在 Python最新安定版はVersion 2.5

トラックバック - http://python.g.hatena.ne.jp/nelnal_programing/20080129