2012年12月23日日曜日

開発環境

『初めての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 コメント:

コメントを投稿