開発環境
- 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 コメント:
コメントを投稿