2012年2月25日土曜日

開発環境

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

4.

コード(TextWrangler)

#!/usr/bin/env python
#encoding: utf-8

class META:
 def __getattr__(self,name):
  print "get name: ", name
 def __setattr__(self,name,value):
  print "set name: ", name, " value: ", value

入出力結果(Terminal)

$ python
Python 2.7.2 (default, Feb 12 2012, 23:50:38) 
[GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from python_program import META
>>> a=META()
>>> a.data='kamimura'
set name:  data  value:  kamimura
>>> a.append
get name:  append
>>> a.sort
get name:  sort
>>> a+10
get name:  __coerce__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
>>> a[2]
get name:  __getitem__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
>>> a[1:]
get name:  __getslice__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
>>> a[1:4]
get name:  __getslice__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
>>> ^D
$

属性へのアクセスコード以外の、+演算子、インデクシング、スライシングなどのコードはエラーになる。

0 コメント:

コメントを投稿