2014年4月19日土曜日

開発環境

Learning Python (Mark Lutz (著)、Oreilly & Associates Inc)のPART Ⅵ.(Classes and OOP)、CHAPTER 28(A More Realistic Example)、Test Your Knowledge: Quiz.1.~9.を解いてみる。

その他参考書籍

Test Your Knowledge: Quiz.1.~9.

  1. AttrDisplay class
  2. shelveモジュールにインスタンスを保存するとき、自動的にインスタンスのクラス等も記録する。
  3. 将来にわたるメンテナンスのため。(変更、修正箇所が一カ所で済む。)
  4. super classの修正がsub classにも反映されるから、将来の変更、修正箇所等がより少なく、容易になったり、コードが少なくて済む。
  5. super classの変更がsub classにも反映されるから、書来の変更、修正箇所等が少なくて済む。
  6. 属性を追加、削除するたびに、その属性のためのコードを追加削除しなくていいから。
  7. いろいろなパーツを組み合わせる場合とかには継承よりもコンポジションを使った方がいい場合もある。
  8. コード(BBEdit)

    person.py

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-
    
    from classtools import AttrDisplay
    
    class Person(AttrDisplay):
        def __init__(self, name, jobs=[], address=None, state=None):
            self.name = name
            self.jobs = jobs
            
        def __str__(self):
            return '[{0}: jobs={1}, name={2} {3}]'.format(
                self.__class__.__name__, self.jobs, self.name['first'],
                self.name['last'])
    
    if __name__ == '__main__':
        person = Person({'first':'first1', 'last':'last1'},
                        ['programmer', 'designer'])
        print(person)
        print(repr(person))
    

    入出力結果(Terminal)

    $ ./person.py
    [Person: jobs=['programmer', 'designer'], name=first1 last1]
    [Person: jobs=['programmer', 'designer'], name={'first': 'first1', 'last': 'last1'}]
    $
    
  9. コード(BBEdit)

    person.py

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-
    
    from classtools import AttrDisplay
    
    class Person(AttrDisplay):
        def __init__(self, name, jobs=[], address=None, state=None):
            self.name = name
            self.jobs = jobs
            # personal contacts database
            self.address = address
            self.state = state
            
        def __str__(self):
            return '[{0}: jobs={1}, name={2} {3}]'.format(
                self.__class__.__name__, self.jobs, self.name['first'],
                self.name['last'])
    
    if __name__ == '__main__':
        person1 = Person({'first':'first1', 'last':'last1'},
                        ['programmer', 'designer'])
        person2 = Person({'first':'first2', 'last':'last2'}, address=12345)
    
        for person in (person1, person2):
            print(person)
            print(repr(person))
    

    入出力結果(Terminal)

    $ ./person.py
    [Person: jobs=['programmer', 'designer'], name=first1 last1]
    [Person: address=None, jobs=['programmer', 'designer'], name={'first': 'first1', 'last': 'last1'}, state=None]
    [Person: jobs=[], name=first2 last2]
    [Person: address=12345, jobs=[], name={'first': 'first2', 'last': 'last2'}, state=None]
    $
    

0 コメント:

コメントを投稿