開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
- Script言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のVI部(オブジェクト指向プログラミング)24章(クラスのコーディング(詳細))の練習問題1を解いてみる。
その他参考書籍
1.
そのサブクラスで空白部分(メソッドなど)を埋める事を目的としたクラス。
コード(BBEdit)
sample.py
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- class Abstract: # 抽象クラス def delegate(self): # 抽象メソッド self.action() # このactionをサブクラスで埋める def action(self): # サブクラスで埋め忘れたときは例外を発生させる raise NotImplementedError("NotImplementedError: 抽象メソッドを定義してください!") # 抽象クラスを継承する3つのクラス class A(Abstract): def action(self): # 抽象クラスの空白部分を埋める print("Hello, Class A!") class B(Abstract): def action(self): print("Hello, Class B!") class C(Abstract): pass # 空白部分を埋め忘れたクラス a = A() b = B() c = C() for x in [a, b, c]: try: x.delegate() except NotImplementedError as err: print(err)
入出力結果(Terminal)
$ ./sample.py Hello, Class A! Hello, Class B! NotImplementedError: 抽象メソッドを定義してください! $
ちなみにJavaScriptの場合。
コード(BBEdit)
var Abstract = function(){}; Abstract.prototype.delegate = function(){ this.action(); }; Abstract.prototype.action = function(){ throw "s抽象メソッドactionを定義してください!\n"; }; var A = function(){ Abstract.apply(this); }; A.prototype = new Abstract(); A.prototype.action = function(){ $('#pre0').append("Hello, Object A!\n"); }; var B = function(){ Abstract.apply(this); }; B.prototype = new Abstract(); B.prototype.action = function(){ $('#pre0').append("Hello, Object B!\n"); }; var C = function(){ Abstract.apply(this); }; C.prototype = new Abstract(); var a = new A(); var b = new B(); var c = new C(); var ary = [a, b, c]; for(var i = 0; i < ary.length; i++){ try{ ary[i].delegate(); } catch(e){ $('#pre0').append(e + "\n"); } }
0 コメント:
コメントを投稿