2013年6月5日水曜日

開発環境

『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7)のIV部(クラスとオブジェクト指向プログラミング)、24章(クラスのコーディング (詳細))の練習問題を解いてみる。

その他参考書籍

1.

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

# 抽象クラス 詳細はサブクラスで定義
class Animal:
    def say(self): pass

# 抽象クラスを継承
class Dog(Animal):
    def say(self):
        print("ワンワン")

class Cat(Animal):
    def say(self):
        print("ニャーニャー")

dog = Dog()
cat = Cat()
for animal in [dog, cat]:
    animal.say()

入出力結果(Terminal)

$ ./sample.py
ワンワン
ニャーニャー
$

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

class A:
    def __init__(self, stop):
        self.stop = stop
    def __getitem__(self, index):
        if index < 0 or self.stop <= index:
            raise IndexError
        return index + 10

a = A(10)

for x in a:
    print(x)

入出力結果(Terminal)

$ ./sample.py
10
11
12
13
14
15
16
17
18
19
$

3.

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

class A:
    a = 10 # これはクラス属性になる
    def f(self):
        A.a += 1

i1 = A()
i2 = A()

instances = [i1, i2]

for i in instances:
    print(i.a)

i1.f() # クラス属性の値の変更は全てのインスタンスに影響

for i in instances:
    print(i.a)

入出力結果(Terminal)

$ ./sample.py
10
10
11
11
$

4.

スーパークラスの__init__メソッドの機能全てを継承して、さらにサブクラスで新たな機能を加えたい場合。

5.

サブクラスのメソッドの中で、Superclass.method(self, ...)と呼び出せばいい。

6.

GenericDisplayクラスの__str__メソッド、gatherAttrsメソッドが動作する。

0 コメント:

コメントを投稿