2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Pythonのお勉強 Part17

1 :ミスターパイソン:2007/02/16(金) 17:05:01
http://www.python.org/
http://www.python.jp/Zope/

http://www.python.jp/doc/release/
http://diveintopython.org/toc/
http://www.python.org/dev/peps/

http://wiki.python.org/moin/
http://python.rdy.jp/

http://www.amazon.co.jp/s/&url=search-alias%3Dstripbooks&field-keywords=Python
http://www.amazon.co.jp/s/&url=search-alias%3Denglish-books&field-keywords=Python

Pythonのお勉強 Part16
http://pc10.2ch.net/test/read.cgi/tech/1166050674/

2 :デフォルトの名無しさん:2007/02/16(金) 17:20:47
おっpy

3 :デフォルトの名無しさん:2007/02/16(金) 17:25:02
門弟

4 :デフォルトの名無しさん:2007/02/16(金) 17:25:54
  _  ∩
( ゚∀゚)彡 おつぱい!おつぱい!
 ⊂彡

5 :デフォルトの名無しさん:2007/02/16(金) 17:33:31
おっぱい

6 :デフォルトの名無しさん:2007/02/16(金) 19:43:39
職場でVBSでツール組む人がいて、それを自分がPythonに(勝手に)移植してる。
実際comtypes入れるとVBSでできる作業はほぼ全てPythonでできるんだよね。
ExcelVBAに移植する時に困ると思って、PythonでExcelVBAに直に書ける仕掛けも作った。

そいつが最初からPythonで書いてくれないかと思うこの頃。

7 :デフォルトの名無しさん:2007/02/16(金) 22:37:32
matlabのインターフェイスがいくつかありますが
どれがおすすめなのでしょうか?

8 :デフォルトの名無しさん:2007/02/17(土) 01:55:26
おっ、Pythonスレ。

9 :デフォルトの名無しさん:2007/02/17(土) 02:35:30
>>6
> PythonでExcelVBAに直に書ける仕掛け
これもうちょっと詳しく聞かせて

10 :デフォルトの名無しさん:2007/02/17(土) 02:37:39
>>6
蛇嫌いな俺もちょっと気になった。kwsk

11 :デフォルトの名無しさん:2007/02/17(土) 09:38:16
pythonでxul使ってgui作れるようにはならないの?

12 :デフォルトの名無しさん:2007/02/17(土) 21:22:31
python lispインターフェイス
http://mail.python.org/pipermail/python-list/2007-January/423984.html
これ以外にもlispのインターフェイスってあった?

13 :デフォルトの名無しさん:2007/02/17(土) 21:56:15
http://boost.cppll.jp/HEAD/libs/python/doc/
Boost.Python
c++へのインターフェイス

14 :6:2007/02/17(土) 22:55:48
>>9,10
非常に泥臭い作業だけど、単純にPythonに実行させるDLLをExcel側で読み込んで
Excelのオブジェクトとかも一緒に渡すだけ。
ExcelVBAに直に書くにはPythonソースそのものを文字列としてVBAに取り込む必要がある。
普通はPythonソースは別に書いてVBAではファイルを取り込むだけでやっている。

実はもうちょっと高度な事もやっていて、ExcelのイベントハンドラをExcelVBAを
介さずにPythonで受け取ったりもやってる。そのインタフェースはC++とCOMで組んでるから
いつもVBAソースに「おまじない」と称してDLL関連の読み込みと起動をしている。

COM系の知識あれば誰でもできるし特に難しい事もやってないけど、面倒だから誰も
やってない様な代物。

15 :デフォルトの名無しさん:2007/02/17(土) 22:59:23
python WSHじゃないのか

16 :6:2007/02/17(土) 23:16:40
ちなみに、ExcelVBAでできるという事は、EnvDTEでもできるという事。

自分は組み込み屋だが、Win動作するシミュレータ使うんでVC++系は必須になる。
クローンコード解析処理をPLYで組んであるんで、それと連携させて関数分割の
指標を出したりしてる。

上に書いたのは、別にEnvDTE経由でなくてもいいんだけど、インクルードフォルダパス
とかわざわざ設定するの面倒だから、COM経由で全部渡しちゃう。

Pythonは他言語・環境への親和性が高すぎて手放せない。特にMS COMとの連携強力すぎだろ。

17 :6:2007/02/17(土) 23:21:32
>>15
イメージ的にはそんな感じ。
でもPythonでCreateObjectするのは嫌、という視点で作ったモンで。

18 :デフォルトの名無しさん:2007/02/18(日) 01:32:24
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/haskell/haskell-jp/559
haskellからpythonを呼ぶ方法

19 :デフォルトの名無しさん:2007/02/18(日) 01:54:54
委譲(デリゲート)での__getattribute__の使い方が分りません。
  従来の__getattr__() は、解決できない属性名の時だけ呼ばれるが
  __getattribute__() は、属性値の取得が必要になったときに、常に呼ばれるらしいのですが。

まず、__getattr__でのサンプル。

class wrapper(object):
def __init__(self, obj):
self.__wrapped = obj # obj を組み込む。
def __getattr__(self, attrname): # attrnameは、知らない名前の属性が来たら呼び出される
return getattr(self.__wrapped, attrname) # 組み込まれたオブジェクトにgetattr 関数で処理を委託。

l = wrapper([]) # リストを引数にwrapper クラスを呼び出すと、リストにできる操作なら全てできる

(実行すると、正しく動作します)
>>> l.append(333)
>>> l.pop(0)
333

20 :デフォルトの名無しさん:2007/02/18(日) 01:56:08
ここで、__getattr__を__getattribute__に置き換えます。

class wrapper(object):
def __init__(self, obj):
self.__wrapped = obj # obj を組み込む。
def __getattribute__(self, attrname):
return getattr(self.__wrapped, attrname)

l = wrapper([])

(試しに、実行してみます)
>>> l.append(333)
(ここで暴走)

なぜ暴走するのかよく分りません。
__getattribute__はどう使うのが正しいのでしょうか?

21 :デフォルトの名無しさん:2007/02/18(日) 02:48:11
>>20
self.__getattribute__ の中で self._wrapped を取得しようとすると
さらに self.__getattribute__(self, '_wrapped') を呼び出して無限再帰ループになるみたい。

解決方法は・・・たとえば、_wrapped をインスタンス属性としてもつんじゃなくて
クラス属性にインスタンスをキーにした辞書をもつようにするとかでどう?

class wrapper(object):
    _wrapped = {}
    def __init__(self, obj):
        wrapper._wrapped[hash(self)] = obj
    def __del__(self):
        del wrapper._wrapped[hash(self)]
    def __getattribute__(self, attrname):
        return getattr(wrapper._wrapped[hash(self)], attrname)

22 :デフォルトの名無しさん:2007/02/18(日) 02:59:35
__getattr__.

23 :デフォルトの名無しさん:2007/02/18(日) 03:00:57
__getattr__ を __getattribute__ に置き換えるって話じゃないのか

24 :デフォルトの名無しさん:2007/02/18(日) 03:08:57
if attrname not in ['_wrapped', etc, etc]:
return getattr(self._wrapped, attrname)
else:
super(wrapper, self).__getattribute(attrname)

25 :デフォルトの名無しさん:2007/02/18(日) 03:14:55
>>21 でおkかと思ったけど、len() ができないなぁ。

>>> l = wrapper([])
>>> len(l)

Traceback (most recent call last):
  File "<pyshell#84>", line 1, in <module>
    len(l)
TypeError: object of type 'wrapper' has no len()

TypeError なあたり、決まった型にしか呼べないのかも。
len(x) って内部で x.__len__ を返してるのかと思ってたけど、ちょっと違うのかな。

>>> l.append(3)
>>> l.__len__()
1

26 :デフォルトの名無しさん:2007/02/18(日) 03:16:09
あまりにも初歩すぎる質問で申し訳ないのですが、
pythonをC:\Python25のディレクトリにインストールして、
環境変数にパスを通しました。

プロンプトからはpythonは起動し、インタラクティブモードでは普通に動きます。
しかし、保存したpyファイルを、スクリプトモードで実行しようとすると、
ファイルが見つからないとエラーが出てしまい実行できません、

パスを直接指定すれば実行できるのですが、
通常はどこにpyファイルを置けばよろしいのでしょうか?

IDLEでも、同様に実行できなくて(pyファイルをどこに置いてよいかわからず)困っています。

申し訳ありませんが、どなたかお力をお貸し願えませんでしょうか、、?



27 :デフォルトの名無しさん:2007/02/18(日) 04:03:11
>>25
アクセサでフィールド値を取得してから、len しないとダメじゃない?
__getattribute__ じゃなく、__getattr__ の例で悪いけど、
この場合、同じと思う。

class wrapper(object):
def __init__(self, obj):
self.__wrapped = obj
def __getattr__(self, attrname):
return getattr(self.__wrapped, attrname)
def get_wrapped(self): # フィールド値取得メソッドを設定
return self.__wrapped

l = wrapper([])
l.append(333)

(ここで len を実行。正常に動作する)
>>> len(l.get_wrapped())
1
>>>

28 :デフォルトの名無しさん:2007/02/18(日) 04:37:24
>>25
__getattribute__ でフックされるのは、dir(l) で出てくるものだけだと思う。
したがって、lenは使えないが__len__は使えるということになる。

>>> dir(l)
['__add__', '__class__', '__contains__', '__delattr__',
'__delitem__', '__delslice__', '__doc__', '__eq__', '__ge__',
'__getattribute__', '__getitem__', '__getslice__', '__gt__',
'__hash__', '__iadd__', '__imul__', '__init__', '__iter__',
'__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
'__rmul__', '__setattr__', '__setitem__', '__setslice__',
'__str__', 'append', 'count', 'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']
>>>

29 :デフォルトの名無しさん:2007/02/18(日) 04:45:58
>>26
何が問題なのかイマイチよく分からない。
エラーメッセージをコピペ汁。

30 :デフォルトの名無しさん:2007/02/18(日) 04:50:46
>>28
なるほど。__len__ が特別だったのか。確かに __init__ とかフックされたら困るよなぁ。
__len__ を定義して、ラップしているオブジェクトの len() を返すようにしたら、ちゃんと動きますた。
質問主じゃないけど勉強になった。この先 __getattribute__ を使うかどうかはともかくとしてw

31 :デフォルトの名無しさん:2007/02/18(日) 06:36:41
Zope3 で不特定のオブジェクトにセキュリティかける機能があるけどプロキシ部分は C で書いてあったな
ググってみたら
ttp://www.egenix.com/files/python/mxProxy.html
こういうのもあるけどこれも C でプロキシ書いてあるっぽい

32 :デフォルトの名無しさん:2007/02/18(日) 07:15:54
>>26
カレントディレクトリと環境変数PATHについて調べてみると良いです。
ttp://www.atmarkit.co.jp/fwin2k/operation/command001/command4.html

もし『実践Python』中だとしたら(違ってたら以下スルーで)、
32ページの test.py は C;\> から実行しているので、
C:\>python test.py のようにする場合、test.py は C:\ に置かないと駄目です。

33 :デフォルトの名無しさん:2007/02/18(日) 11:16:44
 携帯買い換えたいんだけど、Nokia Series 60 以外でpythonの動く携帯ってあるのかな? 日本で使えるやつで。

Python for Mobile Devices
ttp://www.awaretek.com/pymo.html

 とか見ると、Windows Mobile用はあっても、Windows Mobile phone editon 用はないから、htcz や X01HT じゃ使えなそうだし。誰か教えて下さい。

34 :デフォルトの名無しさん:2007/02/18(日) 12:33:37
>32さん
ありがとうざいます!カレントを移動したらできました、、
環境変数でパスを通していたらそれで大丈夫だと思っていました、、
本当に助かりました!

ご指摘の通り、「実践Python」中ですw
プロンプトからの実行は解決したのですが、
34ページのIDLEからpyファイルを実行するというのがうまくいかない感じです、
(NameError: name 'hi' is not defined と返ってきます、)
pyファイルの置き場所がまずいのでしょうか、、?それとも根本的な間違いがあるのでしょうか、、
IDLE上から、はファイル名ではなく関数名を呼ぶのですよね、、うーん

>29さん
32さんの助言で解決できました、
レスを頂きどうもありがとうございます。
私の勉強不足で完全には解決していない部分もありますので、
もしよろしければお力をお貸し下さい。

みなさま、ありがとうございました。

35 :デフォルトの名無しさん:2007/02/18(日) 12:43:37
>>19 >>20 で __getattribute__ の使い方について質問した者です。

なぜ、__getattr__ ではなく__getattribute__ を使いたいと思ったかというと、
「スーパークラスの配列で,複数の異なるサブクラスのインスタンスを一元管理する」
というテクニックを使えるようにしておきたいと思ったからです。

  ちなみに、従来からあるメソッド __getattr__() は、解決できない属性名の時だけ呼ばれるが
  __getattribute__() は、属性値の取得が必要になったときに、常に呼ばれる、とのこと。

「スーパークラスの配列で,複数の異なるサブクラスのインスタンスを一元管理する」に
ついては、javaの解説ページですが、下のところにあります。
http://itpro.nikkeibp.co.jp/members/NSW/ITBASIC/20050620/162997/

(略)部長さん,課長さん,担当さんをそれぞれ表すBuchoクラス,Kachoクラス,Tantoクラスを
定義し,それぞれのクラスのメンバーとして給与の金額を返すgetKyuyoという関数があるとします。
複数のクラスに同じ名前の関数があるのですから,それらを汎化して社員を表すShainクラスを定義
しましょう。(略)

サブクラスであるBuchoクラス,Kachoクラス,Tantoクラスは,0を返すgetKyuyoを継承することに
なります。こんな関数を継承しても役に立ちませんね。スーパークラスから継承した関数の機能が
サブクラスに合わない場合は,サブクラスで同名のメソッドを記述すれば上書き変更できます。
これを「オーバーライド(override)」と呼びます。部長さんの給与は70万円,課長さんの給与は
50万円,担当さんの給与は30万円としましょう

(略)汎化を行わなかったら「役職ごとに給与を求めて集計する」という手順になるでしょう。
汎化を行ったことで「社員の給与を一気に集計する」という手順が実現できるのです。(終)

まあ、それに必要かなと思ったんですが、単にshain = [] に shain.append(shainObject)で集めて、
for で 要素に次々と .getKyuyo して、それを加算していくだけでいいような気もします。

本当に __getattribute__ が使えないと困るのかな? 頭冷やして考えないと分からないw
とにかく、いろいろ参考になりました。みなさん、どうもありがとう。

36 :デフォルトの名無しさん:2007/02/18(日) 13:03:09
>>33
Iron PythonはWMで動くの?ってやり取りをどっかで見かけた。
結論は確か無理って話だったと思う。

docomoのM1000で Python for UIQが動くかも。
M1000ユーザーじゃないから実際のところは知らない。
でも、PyS60がAPIとかドキュメントとか一番充実してると思う。

37 :デフォルトの名無しさん:2007/02/18(日) 14:06:03
>>35
そのプログラムは単にオブジェクト指向のポリモーフィズム(多様性)を利用しているだけなので
__getattribute__ は必要ありません。そのプログラムを Python で書くなら、こんな感じになります。

class Shain:
    def getKyuyo(self): return 0
class Bucho(Shain):
    def getKyuyo(self): return 700000
class Kacho(Shain):
    def getKyuyo(self): return 500000
class Tanto(Shain):
    def getKyuyo(self): return 300000

s = [ Bucho(), Kacho(), Kacho(), Tanto(), Tanto(), Tanto() ]

goukei = 0
for p in s: goukei += p.getKyuyo()
print goukei


ちなみに、Python では Bucho Kacho Tanto を Shain のサブクラスにしなくても動きます。
これは Java の「変数の型」という概念が Python にはないからです。
Python ではオブジェクトに対してメソッドを呼び出した場合、その名前を持つメソッドが
動的に(実行時に)決定されるので、スーパークラスで抽象化する必要はありません。(ダックタイピング)
(ただし、スーパークラスの振る舞いを引き継ぐ為の継承は有効な手段です)
呼び出されるメソッドが静的に(コンパイル時に)決定される Java や C++ などとの大きな違いですね。

38 :デフォルトの名無しさん:2007/02/18(日) 14:07:47
>>36

>>Iron PythonはWMで動くの?ってやり取りをどっかで見かけた。
>>結論は確か無理って話だったと思う。

 確かにどっかで見かけた。

>>でも、PyS60がAPIとかドキュメントとか一番充実してると思う。

 そうなのか・・・メインが不調なので、702NKを再登録するか、
htcz or X01HTにするかで考えてたけど、残念です。


39 :35:2007/02/18(日) 14:26:56
>>37
サンクス。

40 :デフォルトの名無しさん:2007/02/18(日) 14:48:14
class Strategy1(object):
 def __init__(self):
  pass
 def strategyMethod(self):
  print u"これは戦略1です" # 処理

class Strategy2(object):
 def __init__(self):
  pass
 def strategyMethod(self):
  print u"これは戦略2です" # 同様の事に対する別の処理方法

class acceptStrategy(object):
 def __init__(self):
  self.__strategy = None
 def setStrategy(self, strategyObject):
  self.__strategy = strategyObject # オブジェクトの受け入れ
 def __getattr__(self, attrname):
  return getattr(self.__strategy, attrname)

41 :デフォルトの名無しさん:2007/02/18(日) 14:49:48
(実行)
>>> s1 = Strategy1()
>>> s2 = Strategy2()
>>>
>>> aStrategy = acceptStrategy()
>>>
>>> aStrategy.setStrategy(s1)
>>> aStrategy.strategyMethod()
これは戦略1です
>>>
>>> aStrategy.setStrategy(s2)
>>> aStrategy.strategyMethod()
これは戦略2です


42 :40,41:2007/02/18(日) 14:52:38
(よく見たら、冒頭にある一行が抜けていた org
というわけで、冒頭の一行を追加)

見よう見まねで strategy パターンを作ってみたが、こんなんでおk?

43 :デフォルトの名無しさん:2007/02/18(日) 15:44:24
>>38
IronPythonはCompact Frameworkの制約の関係で動かないけど、ネイティブの
Python Windows CE portなら動くと思う。
http://s-square.sakura.ne.jp/2006/09/14/pythonce-install/

44 :デフォルトの名無しさん:2007/02/18(日) 16:33:52
auther って・・・・。

45 :デフォルトの名無しさん:2007/02/18(日) 20:17:17
>>34
『実践Python』 34ページ見てみました。説明端折りすぎで呆れました・・・。

図2-3-1-3のように動作させるには、*エディタウインドウのメニューから*
Run > Run Module としてモジュール(ここでは hi.py )を読み込みます。
すると IDLE のウインドウに
>>> ================================ RESTART ================================
と表示されるので、あとは
>>> hi('Hello')
Hello
のように実行できます。

とりあえず、いきなり IDLE を使うのはお勧めできません。
最初のうちはエディタとコマンドプロンプトを使うようにしたほうがいいと思いますよ。

46 :デフォルトの名無しさん:2007/02/18(日) 21:46:47
>>43

>>Python Windows CE portなら動くと思う。
>>http://s-square.sakura.ne.jp/2006/09/14/pythonce-install/

 早速見せてもらいました。W-Zero3 と X01HT は OS が違うのでダメ
かと思いこんでたけど、ちょっと調べてみたら、Flash Player なんか
は同じ CAB ファイルが使えるみたいなこと書いてあるね。試してみた
いけど、知人にX01HT/htcz ユーザーがいないんだよね。

47 :デフォルトの名無しさん:2007/02/19(月) 00:30:34
> 45さん
どうもありがとうございます!
おかげさまでうまく行きました。
これで、学習を進められます(^-^)

私のような初心者の質問に優しく答えて下さって本当にありがとうございます。
失礼致しましたー。

48 :デフォルトの名無しさん:2007/02/19(月) 01:12:00
>>46
hTcZで普通に動いている。

Phone Editionは、電話機能が追加になっただけで、
PC Editionと基本的には同じ。


49 :デフォルトの名無しさん:2007/02/19(月) 01:32:23
eclipse Pydev
でpythonのWSHを編集 実行でバックする方法はないのでしょうか?


50 :デフォルトの名無しさん:2007/02/19(月) 12:26:06
>>48
>>hTcZで普通に動いている。

>>PC Editionと基本的には同じ。

 これを見てマイクロソフトのサイトで確認したら、その通り
だった。早速買いに行きます。48さんありがとう。

51 :デフォルトの名無しさん:2007/02/19(月) 14:13:52
http://sourceforge.net/project/showfiles.php?group_id=78018
ここにpy2.6なんてあるのだけど
いまのpythonの最新バージョンは2.5だよね?

52 :デフォルトの名無しさん:2007/02/19(月) 14:57:18
よく考えたら、stateパターンとStrategyパターンは、
視点が違うだけで同じものじゃないか? 以下、stateパターン。

import sys
import exceptions

class _StateTemplate(object): # Abstract なつもり
def _showMessage(self):
raise exceptions.NotImplementedError, '%s' %`self.__class__`

class myState1(_StateTemplate):
def __init__(self):
pass
def _showMessage(self):
print u"こんにちは。" # ある状態(例えば昼)に対応した処理

class myState2(_StateTemplate):
def __init__(self):
pass
def _showMessage(self):
print u"今晩は。" # ある状態(例えば夜)に対応した処理

class acceptState(object):
def __init__(self):
self.__currentState = None
def setState(self, stateObject):
self.__currentState = stateObject # オブジェクトの受け入れ
def __getattr__(self, attrname):
return getattr(self.__currentState, attrname)


53 :デフォルトの名無しさん:2007/02/19(月) 14:58:42
(実行)
>>> state1 = myState1()
>>> state2 = myState2()
>>>
>>> aState = acceptState()
>>>
>>> aState.setState(state1)
>>> aState._showMessage()
こんにちは。
>>> aState.setState(state2)
>>> aState._showMessage()
今晩は。


54 :デフォルトの名無しさん:2007/02/19(月) 15:01:49
これはstrategyパターン。stateパターンとは視点こそ違うが
同じものだ、と思う。それでいいのか?(いいと思うが)

import sys
import exceptions

class _strategyTemplate(object): # Abstract なつもり
def _strategyMethod(self):
raise exceptions.NotImplementedError, '%s' %`self.__class__`

class Strategy1(_strategyTemplate):
def __init__(self):
pass
def _strategyMethod(self):
print u"これは戦略1です" # 処理

class Strategy2(_strategyTemplate):
def __init__(self):
pass
def _strategyMethod(self):
print u"これは戦略2です" # 状況が変わったとき、同様の事を実現する別の処理

class acceptStrategy(object):
def __init__(self):
self.__strategy = None
def setStrategy(self, strategyObject):
self.__strategy = strategyObject # オブジェクトの受け入れ
def __getattr__(self, attrname):
return getattr(self.__strategy, attrname)


55 :デフォルトの名無しさん:2007/02/19(月) 15:03:07
(実行)
>>> s1 = Strategy1()
>>> s2 = Strategy2()
>>>
>>> aStrategy = acceptStrategy()
>>>
>>> aStrategy.setStrategy(s1)
>>> aStrategy._strategyMethod()
これは戦略1です
>>> aStrategy.setStrategy(s2)
>>> aStrategy._strategyMethod()
これは戦略2です

56 :デフォルトの名無しさん:2007/02/19(月) 15:51:50
>>51
意味はわからんけど、他のモジュールでも見た事ある。
当時は、2.5リリース前なのに、2.5用があった。
試しにインストールしようとしたら、
「Python2.5がインストールされてません」
ってエラーがでて何もできなかった。

57 :デフォルトの名無しさん:2007/02/19(月) 16:11:45
main trunk の追っかけやってる人用じゃないの?

58 :デフォルトの名無しさん:2007/02/19(月) 18:05:35
そりゃ、俺たちが2.5を使ってるってことは、どっかで偉い人は2.6を作ってるわけだよ。

59 :デフォルトの名無しさん:2007/02/19(月) 18:34:13
http://sourceforge.net/mailarchive/forum.php?thread_id=31604567&forum_id=44139
matlabとのインターフェイスをここと同じようにしてインストールしようとして挫折した。
python 2.5
winxp
matlab 7.1
mingw32
でうまくいった人いますか?

60 :デフォルトの名無しさん:2007/02/19(月) 18:55:50
俺は2.7を使っていますが何か?

61 :デフォルトの名無しさん:2007/02/19(月) 19:18:44
ツマンネ

62 :デフォルトの名無しさん:2007/02/19(月) 19:34:28
>>60
2.7ってZopeか?
関係者乙。

63 :デフォルトの名無しさん:2007/02/19(月) 20:08:58
俺は断然Zope3

64 :デフォルトの名無しさん:2007/02/19(月) 21:07:06
>>54
> これはstrategyパターン。stateパターンとは視点こそ違うが
> 同じものだ、と思う。それでいいのか?(いいと思うが)

その通り。クラス図上や構造上では同じ。
目的によって呼び方が変わるんです。デザパタはまず目的ありきだから。

65 :デフォルトの名無しさん:2007/02/19(月) 22:03:10
ま た 燃 料 投 下 か

66 :デフォルトの名無しさん:2007/02/20(火) 00:48:11
>>49
誰もかまってあげてないので、

「実行でバックする」って何だ?

67 :デフォルトの名無しさん:2007/02/20(火) 00:59:37
>>66
「pythonのWSHを編集・実行・デバッグ」ってことじゃないのか。
「pythonのWSH」が依然として意味不明だが。

68 :デフォルトの名無しさん:2007/02/20(火) 02:41:03
pythonのおかげで、単純作業ばかりを命令してくる
ハラスメント上司から開放されました。

パワーポイントに画像100枚きれいに並べて貼れとか
そんなばっかり

しかし、最近、夜中に自動処理させてるはずのパソコンが、
次の朝出勤すると電源が落ちてるようになりました。

1時間おきに、途中結果をsaveするようにできる
簡単な枠組みはないのでしょうか?

69 :デフォルトの名無しさん:2007/02/20(火) 03:57:59
timeをつかう

70 :デフォルトの名無しさん:2007/02/20(火) 06:18:45
>>67
wsfにでも書いてるんじゃね?
ActivePythonで出来なかったっけ。

71 :デフォルトの名無しさん:2007/02/20(火) 06:39:23
同じエンコードのページ(html)でうまくユニコードに変換できるのとできないのがある・・・
まあできないのはルータの設定画面なんだが、なんでだろ
なにがillegal multibyte sequenceだ!

72 :デフォルトの名無しさん:2007/02/20(火) 09:47:59
ttp://svn.python.org/view/python/trunk/README?rev=52872&r1=52754&r2=52872

73 :デフォルトの名無しさん:2007/02/20(火) 09:50:38
>>64
だよね。
視点が違うだけだけど、いや、そうじゃなくて、視点の違いこそ大事な
ことなんだと思うようになってきた。
どういうパターンを使うべきか、なんて考えるとき、視点こそが
大事だもんね。

Visitor パターンも構造がよく似てる。ちょっとだけ違うかな。どうだろ。

  ところで、>>52 のstateパターンと >>54 Strategyパターンで、
  冒頭の import sys は不要だった。(消し忘れ)失礼。

74 :デフォルトの名無しさん:2007/02/20(火) 10:36:56
>>52-55
その例どっちもstrategyだと思う

75 :デフォルトの名無しさん:2007/02/20(火) 10:58:11
tim.sleep(-1)って無限ループか何か?何が起こってるの?エラーにはならないんだけど。

76 :デフォルトの名無しさん:2007/02/20(火) 11:02:08
↑のちのデザパタ議論のひきがねであった

77 :デフォルトの名無しさん:2007/02/20(火) 11:02:42
アチャー(ノ∀`)

78 :デフォルトの名無しさん:2007/02/20(火) 12:16:08
所詮デザパタ

79 :デフォルトの名無しさん:2007/02/20(火) 12:25:54
pyってcの構造体に相当するものがないってことでいいのでしょうか?

80 :デフォルトの名無しさん:2007/02/20(火) 12:54:31
>>79
構造体より多機能なクラスがあるじゃないか!

81 :デフォルトの名無しさん:2007/02/20(火) 13:03:47
>>75
time.sleep() に -1 を渡すとどうなるかなんてマニュアルには書いてないから、
何が起こっていても不思議じゃないよ。というか渡すべきじゃない。
それでも実際に何が起こっているのか知りたいのなら、
Python ソースコードの timemodule.c を眺めてみるといいかも。

82 :デフォルトの名無しさん:2007/02/20(火) 13:41:39
Pythonの回りにもイタいヤツが増えたな。
裾野が広がった弊害か。

83 :デフォルトの名無しさん:2007/02/20(火) 13:49:22
>>74
strategyとstateの本質的違いを挙げてほしい。
いろいろ考えたんだけど、>>52-55 で問題ないのではないか、
と思っている。
(冒頭の消し忘れの import sys はご愛嬌ということで)

それどころか、Visitor パターンもJavaでは違うと思うんだけど、
Pythonで書く限りは構造としては同じにならざるを得ないんじゃないかなぁ。
(ただいま、いろいろ検討中)

あと、DecoratorパターンとProxyパターンも両者は視点以外は同一のもの
じゃないかな。

84 :デフォルトの名無しさん:2007/02/20(火) 15:43:52
何のためのデザパタだよ。
定義が与えられているんだから、違いだの視点だのを云々する必要は全然ないだろ。
「このコードは○○パターンか?」と聞くのは「この単語は○○という意味か?」と聞くのに等しい。
後者なら「辞書引け」で終わるところだ。RTFM

85 :デフォルトの名無しさん:2007/02/20(火) 15:55:29
>>84
分かってない人は、出てこなくていいって。

視点が違うというのは、どこに着目すれば、適用できるパターンが
おのずと見えてくるか、という話。
結果のプログラムの構造の話ではなくて、いまこの問題では
なにを問われているのかを見分けるのは容易ではない。

与えられた状況に注目するか、
こちらが用意している対応策に注視するかは、
できたプログラムの構造が同じでも、
違うだろ。

それと、JaveとPythonでは機能が違う。
Javaで書けば違うのは分るが、Pythonではそうはならない
ケースもある。

で、お前は DecoratorパターンとProxyパターン の本質的違いはなんだと思うわけ?
視点以外の違いを挙げてみろ。

86 :デフォルトの名無しさん:2007/02/20(火) 16:09:19
>>84
辞書を引けとの言葉に従ってWikipediaの英語版でStateパターンを検索したら、
ノートで>>74>>83と同じように状態オブジェクトの中で遷移させるのが
Stateパターンだとかそうじゃないとかくだらない議論が繰り広げられてました><

87 :デフォルトの名無しさん:2007/02/20(火) 16:10:54
真昼間から長文レスばっかりだな。
Pythonプログラマは火曜日が定休日か?

88 :デフォルトの名無しさん:2007/02/20(火) 16:20:21
つーか、デコレーターもプロクシも限られた時間でどうしても
実装しないといけない場合のテクニックでしかないでしょ。
練り上げたコードが最終的にデコレータパターンとかありえないし。
だから、そういう下らないものの本質が何だとか考えても無意味。

89 :デフォルトの名無しさん:2007/02/20(火) 16:29:25
確かに、練り上げたコードはこれといったパターンに収まらないだろうな

90 :デフォルトの名無しさん:2007/02/20(火) 16:37:25
日本語だったらStateもStrategyもDecoratorもProxyもかわんないんじゃないの
字義的に変でラベル変えただけだから日本人には関係ない話だなこの辺

>どういうパターンを使うべきか
つか、デザパタってコード書く時にそんなに意識するかな
読む時に脳内コードスタック圧縮する以外の使いどころなくないか?

91 :デフォルトの名無しさん:2007/02/20(火) 16:39:35
>>88
ともいえない。
例えば、ブリッジパターンだって、デコレータの応用とも考えられなくもないし。

ま、抽象論ばかり言ってても仕方ないが。

92 :デフォルトの名無しさん:2007/02/20(火) 17:00:12
それにしても手術前からステータスだけは上がっていくのか・・・

93 :92:2007/02/20(火) 17:00:47
誤爆です、、、申し訳ない

94 :デフォルトの名無しさん:2007/02/20(火) 18:09:25
>>88
>練り上げたコードが最終的にデコレータパターンとかありえないし。
はあ?
java.ioパッケージとかはdecoratorパターンの典型的な例じゃねーか。
Webアプリフレームワークでもフィルタ系はdecoratorパターン使うだろ。
自分がPythonで使ったことがないからといって勝手な結論出すなよ。

95 :デフォルトの名無しさん:2007/02/20(火) 18:22:16
>>85
>で、お前は DecoratorパターンとProxyパターン の本質的違いはなんだと思うわけ?
>視点以外の違いを挙げてみろ。

どちらも結局はcomposition+delegationなので、目的は違うけど手段は一緒。
本質的に違いはなく、視点が違うだけというのは同意。
ただそれを言い出すとデザインパターンの半分は本質的に同じなので、権威に弱いこの業界では禁句だろう。
いままでさんざんGoFを褒めていた人の立場がなくなる。


96 :デフォルトの名無しさん:2007/02/20(火) 18:24:00
「【GoF】デザインパターン 6
http://pc10.2ch.net/test/read.cgi/tech/1141846078/

97 :デフォルトの名無しさん:2007/02/20(火) 18:31:18
>>87
>真昼間から長文レスばっかりだな。
>Pythonプログラマは火曜日が定休日か?

ここのところのデザパタの話はね、
Java使いとか.Net使いみたいな、
典型的なITドカタがやってるんだよ.

98 :デフォルトの名無しさん:2007/02/20(火) 18:34:51
マニュアル化されてないと安心できない、ゆとり教育世代に愛されるデザパタですよ

99 :デフォルトの名無しさん:2007/02/20(火) 18:40:54
なんでもマニュアル化はゆとりのちょい上なわけだが

100 :デフォルトの名無しさん:2007/02/20(火) 18:59:54
ゆとり教育世代でなくても自主的にゆとり教育みたいな人も居るわけだから、
ゆとり教育世代にだって賢い人は居るのだろうね。

101 :デフォルトの名無しさん:2007/02/20(火) 19:01:31
ゆとり世代はマニュアルがあっても仕事できなくなると噂されてたが
実際どうなったのだろう

102 :デフォルトの名無しさん:2007/02/20(火) 20:18:23
ゆとりとかマニュアルとか心配する前に、
Pythonスレで全然関係ない話題を続ける、
空気の読めない自分のことを心配した方がいいよ.


103 :デフォルトの名無しさん:2007/02/20(火) 20:20:33
それは以前から心配してるんだが、どうにもならんのよ。

104 :デフォルトの名無しさん:2007/02/21(水) 01:51:59
>>102
ここはデザパタスレになったんだよ?
流れを読めない人こそ自分の心配した方がいいと思うけどなぁーーー

105 :デフォルトの名無しさん:2007/02/21(水) 04:20:02
>>92が一番興味を引かれるレスだな

106 :デフォルトの名無しさん:2007/02/21(水) 07:45:18
>>104
うぜぇ(wwwwwwwwww

107 :デフォルトの名無しさん:2007/02/21(水) 18:52:38
import urllib
fo = urllib.urlopen("http://www.yahoo.co.jp/")
#fo = urllib.urlopen("http://localhost/") # これなら動く

AcitvePython2.2と2.3を入れたら本家python2.4で動いてた
urllibを使ったコードがのき並、全て動かなくなりますた。

IOError: [Errno socket error] (10061, 'Connection refused')
だそうです。ググっても わかりません ><

108 :107:2007/02/21(水) 18:53:28
telnet www.google.com 80 して :『GET / HTTP/1.0 [改行][改行]』したら
http://rogiken.org/wiki/index.php?%BB%AA%B8%EC%B2%F1%CF%C3%C6%FE%CC%E7
ここと同じような出力が帰ってきました。
browserとtelnetではconnectできるけど、urllibではconnectできない状況。
\(^o^)/

109 :デフォルトの名無しさん:2007/02/21(水) 20:05:38
配列でdata2 = ["abcde","12345","あいうえお"]だった時、
data2に配列が何個あるか取得するにはどうしたらいいですか?
data2の配列の場合、3の値を取得する方法

110 :デフォルトの名無しさん:2007/02/21(水) 20:29:20
len(data2)

111 :デフォルトの名無しさん:2007/02/21(水) 20:58:00
>>107
そりゃバージョンダウンすりゃそんなもんだろ
なんでActivePython 2.4.xを使わない?

112 :デフォルトの名無しさん:2007/02/21(水) 21:02:01
>>79
Cの構造体を読み込みたいなら struct.unpack() ですよ。

いやわかってるって。これが欲しいんじゃないんだろ?

113 :107:2007/02/21(水) 21:14:00
>>111
使ってみたいと思ったToolが2.2でしか動かないんだ…

環境変数を直して本家2.4のほうにlinkするようにして
2.4でコンパイルしてるんだけど、動かねー。インストーラ
なんて使った記憶ないし…何がまずいんだろう…

114 :デフォルトの名無しさん:2007/02/21(水) 21:20:01
>>113
コンパイルしようとしてるのは、2.2でしか動かないツールなのか?
urllibを使ったプログラムの方なのか?

115 :107:2007/02/21(水) 21:49:31
コンパイルしようとしてるのは>107の urllib を使ったプログラムです。

すみません、言葉が足りてませんでした…orz

116 :デフォルトの名無しさん:2007/02/21(水) 22:07:44
それ,Yahoo!がurllib.urlopenのデフォルトのUserAgentをブロックしてるのかも.
たしか,"Python2.2/urllib"みたいなUAだったと思う.

なので,これを書き換えてやれば上手くいくかも
外してたらすまん

req = urllib.Request("http://www.yahoo.co.jp/")
req.add_header("User-Agent", "(何か適当なUserAgentをあらわす文字列)")
fo = urllib.urlopen(req)

こんな感じでどうよ?

117 :107:2007/02/21(水) 22:35:46
>>116
ごめん、いま動かしてみたら、>107ので動いたw

http://yanbe.org/python/proxy/
このページのクローラ側のプログラムを組もうと思って
プロキシとかいじってたのがまずかったのかもしれない…orz

再起動してプロクシ鯖のプロセスがきちんと落ちて、urllibが
connectできるようになったと。…もう少しちゃんと調べてから
聞こうよじぶん…orz とりあえず動くようになったしthxです。

クローラ側のプログラムって書くの難しいのかな?
Webrickとか情報が多くて正直うらやますい…

118 :デフォルトの名無しさん:2007/02/21(水) 22:39:41
( ゚Д゚)y─┛~~

119 :107:2007/02/21(水) 22:41:01
>再起動して -> OS自体を何回か再起動して
たびたび訂正スマソ。

120 :107:2007/02/21(水) 22:46:33
>>118
…orz たしかに「あと出しジャンケン」みたいに
なっちゃってるけどさ。そんな呆れちゃ嫌。(なにその傲慢)

121 :107:2007/02/21(水) 22:48:52
(なにその傲慢) -> (傲慢)
なんか誤解を招きそうな表現になってるし…orz

122 :デフォルトの名無しさん:2007/02/21(水) 22:51:39
とりあえず風呂にでも入っておちつくんだ

123 :デフォルトの名無しさん:2007/02/21(水) 22:51:42
いや明らかに煽ってるぞ

124 :デフォルトの名無しさん:2007/02/21(水) 22:59:48
傲慢は自分に向って言ってるんでしょ?


125 :107:2007/02/21(水) 23:06:59
別に煽ってなんかねぇーですよ。つーかいま動かしてみたら

import os, urllib
os.environ['http_proxy'] = 'http://localhost:8000'
fo = urllib.urlopen("http://www.yahoo.co.jp/")
data = fo.read(); print data

Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [21/Feb/2007 22:56:03] "GET http://www.yahoo.co.jp/ HTTP/1.0" 200
とか表示されてちゃんと動いてやがるしwww.

きょう一日のあの苦労は一体何だったんだろう…orz
もうね、あぼがどバナナと。もう寝ゆ

126 :116:2007/02/21(水) 23:16:01
>>117
うはww実は俺そこの管理人ですw
混乱させてしまったようでスミマセン.予想外のタイミングと場所で取り上げていただいて
内心驚いてます.

いまアップされてるやつの実装は,適当もいいところなので,近いうちに,手元にある
もう少しマシなバージョンに差し替える予定なので,今のところは勘弁してください.

ちゃんとしたPythonのProxy Serverの実装だったら以下のページにあるのを
参考にしたらいいと思います.
http://xhaus.com/alan/python/proxies.html

上のページにある中では,Tiny HTTP Proxy とか,行数も少なめで見通しが良くて
参考にするにはいいんじゃないかと.

(特定のレイアウトのページでなく,汎用の)クローラで参考するんだったら
この辺ですかね. http://takanory.net/takalog/540

127 :デフォルトの名無しさん:2007/02/21(水) 23:48:49
ソケット使ったチャット作ってるんですけど、acceptの返り値について質問。
サーバとクライアント、両方同じポートにバインドしてます。でもacceptの返り
値のポート番号がbindした番号と違うんです。これは別に問題ないんですか?

128 :デフォルトの名無しさん:2007/02/21(水) 23:53:10
なんかソケットプログラミングの入門書みたいなの1冊読め。話はそれからだ。

129 :デフォルトの名無しさん:2007/02/22(木) 00:37:48
俺だったらXML-RPCで適当に作る

130 :デフォルトの名無しさん:2007/02/22(木) 00:50:40
しつもん

イテレータって、iter(x)で作ったオブジェクトのことだと思うんだけど、
同じオブジェクトから作った複数のイテレータインスタンスがあった場合の
動作ってどこかで規定されてる?

具体的には、オブジェクトxがあったときに

i1=iter(x)
i2=iter(x)

print i1.next()
print i2.next()

とかした時の挙動が、ファイルオブジェクトとストリングのリストで
違ってしまって気持ち悪いのを何とかしたい、ということなんですが。
seek位置を覚えてちゃんとlock.acquire→seek→readline→release
みたいなことすれば揃うのかな(する意味あるかはさておき)。


131 :デフォルトの名無しさん:2007/02/22(木) 01:17:06
javaのjarに相当するものはありますか?
一つのファイルに全ファイル突込んで、そこからプログラムをstartさせたいのですが。


132 :デフォルトの名無しさん:2007/02/22(木) 01:25:08
>>131
PythonEggsってのがあるよ。といいつつ、俺は使ったことないから使い方聞かれても困るけど。

133 :デフォルトの名無しさん:2007/02/22(木) 01:29:57
>132

arigato.


134 :デフォルトの名無しさん:2007/02/22(木) 05:03:45
>>130
リファレンスに書いてあるけど、ファイルオブジェクトはイテレータ
iter()するとファイルオブジェクト自身が返る
複数のイテレータが必要なら、再度open()する

>>> fo1 = open(r'hoge.txt')
>>> fo2 = open(r'hoge.txt')
>>> it1 = iter(fo1)
>>> it2 = iter(fo1)
>>> print fo1 == it1, fo1 == it2, it1 == it2, fo1 == fo2
True True True False


135 :デフォルトの名無しさん:2007/02/22(木) 06:03:36
>>130
イテレータとゆーのは一般に __iter__ と next の2つのメソッドを兼ね備えているオブジェクトのことかと。
リスト自身はイテレータではない(__iter__ メソッドはあるが next メソッドがない)。

ストリングのリストの方をファイルオブジェクトの挙動に合わせるなら StringIO モジュールが使える。

136 :107:2007/02/22(木) 08:50:10
>>126
( ゚д゚)ポカーン。なんか中の人 来てたーw

色々と、参考になるページを紹介して頂けたみたいで
本当にありがとうございます (感謝) 調べてみると
compact な proxy serverの実装とか色々あるんですね。。。
じぶんもちゃんと調査のほう、もう一度してみようと思います。
本当にthxです><

137 :デフォルトの名無しさん:2007/02/22(木) 19:47:48
pygwtってどうよ。ググっても国内だと三件しかヒットしないんだが…

138 :デフォルトの名無しさん:2007/02/22(木) 20:27:21
出来てないやん

139 :107:2007/02/22(木) 21:54:30
>>138
なんとなくswingっぽくて素朴なかんじが俺は好きなんだけど
pythonからjavascriptに変換するのって他にもあるのかな?

140 :デフォルトの名無しさん:2007/02/22(木) 23:11:02
ふつうにjavascriptを書けば?
javascriptのライブラリとかも高機能なのが次々現れてる現状で、
そういうツールを(すごいゆっくりな速度で)開発してること自体が疑問に思うw

141 :デフォルトの名無しさん:2007/02/23(金) 17:56:48
.py以外のファイルを実行したり
フォルダ開いたりってどうしたらできるのでしょうか?

142 :デフォルトの名無しさん:2007/02/23(金) 19:31:27
>>141
import os
os.system(ファイル実行のコマンド)

143 :デフォルトの名無しさん:2007/02/23(金) 22:26:59
>>142
ありがとうございます!

144 :デフォルトの名無しさん:2007/02/23(金) 22:31:58
ほッ

145 :デフォルトの名無しさん:2007/02/24(土) 10:23:10
フォルダを開くってのはちょい違う気がしないでもないが、
気にしないでおくか…

146 :デフォルトの名無しさん:2007/02/24(土) 15:36:21
Windowsなら

import os
os.system("start フォルダ名")

で開いたりしないのかな。Macだとopen?


147 :デフォルトの名無しさん:2007/02/25(日) 01:42:59
フォルダ開くだけなら:

import os
os.system("explorer c:\\")

148 :デフォルトの名無しさん:2007/02/25(日) 10:11:26
ttp://blog.adglobe.net/2007/02/07/picnik-free-online-photo-editing-services/
> The picnik services is a combination of front end with Adobe Flex,
> and the backend is done using Python

149 :デフォルトの名無しさん:2007/02/25(日) 18:05:34
python による Chain Of Responsibility
http://www.h3.dion.ne.jp/~ytakagi/ChainOfResponsibility.html

(まだ説明もなにもないけど、のんびり説明も書いていくつもり。
 ちなみに、結城浩氏の本の Chain Of Responsibility パターンの
 サンプル・コードを、python で同じように動くようにしたもの)

Javaと同じく継承で作ってみたけれど、やってみるまで僕も気がつかなかったが、
Python の継承はJava より制限が厳しく、サブクラスでJavaのように
拡張できない。
(__init__ を拡張すると、親クラスのメンバーでなくなってしまうようだ)

だから、__init__ のフィールド項目を後で増やすとか出来なくて、
親クラスで最初に全部書いておく必要がある。
(これが出来ないと非常に困る。特にこの Chain Of Responsibility では)

これではあまりにやりにくいため、
継承ではなく、すべて委譲で作り直さないといけないなぁと
思った次第。少し休んで取り組みたい。

150 :デフォルトの名無しさん:2007/02/25(日) 18:48:10
Charlie仕事少なッ!w
超専門職ってかんじか・・w

151 :デフォルトの名無しさん:2007/02/25(日) 19:07:39
>>149
>だから、__init__ のフィールド項目を後で増やすとか出来なくて、
>親クラスで最初に全部書いておく必要がある。
Chain Of Responsibilityパターンがなんなのかは知らんが、
そういう場合は def __init__(self, *args, **kw) のようなカタチで引数を
取るのがPythonの定石なんじゃないの?

152 :デフォルトの名無しさん:2007/02/25(日) 19:23:21
>>> class Super(object):
  def __init__(self, hoge):
    self.hoge = hoge

>>> class Child(Super):
  def __init__(self, hoge, fuga):
    super(Child, self).__init__(hoge)
    self.fuga = fuga

>>> c = Child(123, 456)
>>> c.hoge
123
>>> c.fuga
456
>>> s = Super(789)
>>> s.hoge
789


普通にコンストラクタをオーバーライドすればいいんじゃないの?

153 :デフォルトの名無しさん:2007/02/25(日) 19:26:35
というか、149のサイトを見る限り、numberにデフォルト値でNoneを設定しとけば、
NoSupport、OddSupportに変な引数を代入する必要はなくなる気がする。

154 :デフォルトの名無しさん:2007/02/25(日) 19:35:56
def limit( self, number):


155 :デフォルトの名無しさん:2007/02/25(日) 19:40:22
def limit(self, number ):
  self.__number = number
  return self

というメソッドを用意しといて

diana = LimitSupport('Diana').limit(200)

というようなコンストラクションも可能

156 :デフォルトの名無しさん:2007/02/25(日) 19:42:35
>>149
ソースコードは pre で囲って欲しいな。
br 要素で改行だの全角スペースでインデントしなくて済むよ。

157 :デフォルトの名無しさん:2007/02/25(日) 19:45:50
>>151
いや、自分はまだJavaから来たばかりで、たしかに Python よく分ってないかも
しれないけど、そういう話とは違うと思うけどな…。

Javaでは コンストラクタとフィールドの設定が分かれているけど、
Python では __init__ とフィールドの設定がくっついているでしょ。

Java のような感じでやれないと、
親クラスを作る時点でインスタンスのフィールドを、
(これからどんなサブクラスが作られるのかも分らないのに)
将来作るかもしれないサブクラスの分もすべて予測して
設定しておかないといけないような、という話で。
(Javaはあとで拡張できる。Python、無理っぽい。
 __init__ の中でフィールド設定しておかないと、
 setメソッドの前にgetメソッドされると、エラー出てしまうし)

それができないと、将来それが必要になったとき、
あとから親クラスを直さないといけなくなる。

どんな場合でも、目の前の10行前後を直すだけで対応できるように
プログラムする、というのがオブジェクト指向の目標である以上
(そううまくいくもんじゃないけど)、それはやっぱりまずいだろうなと。

どうもサブクラスで __init__ を
オーバーライドしちゃうと、サブクラスがサブクラスでない
ことになって、親クラスのメソッドを使えなくなるみたいなんだよね。

ただ、もう少し検証しないと、断定はできないけど。

158 :157:2007/02/25(日) 20:06:51
と思ったが、 >>155 を見ると、
やれてるよな… org

もう一度、じっくりコードを検討してみます。
ほかのみんなも、サンクス。

いちおう、(GoF 以外の新パターンも含め)全パターンやるつもりだが、
前途多難だ…。

159 :デフォルトの名無しさん:2007/02/25(日) 20:33:36
PHPでも使えば?

160 :デフォルトの名無しさん:2007/02/25(日) 20:51:03
コンストラクタとフィールドの設定が云々の意味が分からない
なんでかんでもJavaの流儀でやろうとするのも分からない

161 :デフォルトの名無しさん:2007/02/25(日) 21:27:58
>>157
class Derived(Base):
 def __init__(self, *arg, **kwarg):
  Base.__init__(self, *arg, **kwarg)

Pythonはプロトタイプ指向の方が色々と馴染むと思うがね。
先にJavaScriptでもやってみれば?

162 :デフォルトの名無しさん:2007/02/25(日) 21:29:43
>>160
× Java
○ オブジェクト指向

163 :デフォルトの名無しさん:2007/02/25(日) 22:13:23
>>160 >>162
オブジェクト指向が目標としてることを簡単にいえば、

1万5000行のコードにかなり大きな手直しを必要とするような場合でも、
何百行も修正するんじゃなくて、目の前の10行かそこいらを
修正するだけで、それが出来るようにしようということです。

有名なのは、1979年頃、MACを開発する前のスティーブ・ジョブズが
パロアルト研究所を訪れた際、Smalltalkの開発者ダン・インガルスの
デモを見て、「エディタのスクロールが行単位じゃなく、滑らかだったら
もっといいんだが」といったところ、インガルスがわずか25秒で直して見せ、
ジョブズを狂喜させたというものです。

どんなものでも、10行かそこいら手を入れるだけで実現する、という
のは現実には難しいですけど、それに一歩でも近づこうということです。

Javaでは当然の流儀になってはいますけど、Pythonもデザインパターンの
すべてのパターンのサンプル・コードがあるようになると、
もっと便利になると思いますよ。

大きな仕事で使ってもらえるチャンスも出てくるかもしれないし。
そんなものはJavaでやれというのは、一つの考え方ではあるでしょうけど、
Pythonの可能性を大きく広げるものになるはずです。

164 :デフォルトの名無しさん:2007/02/25(日) 22:17:08
そうか

165 :デフォルトの名無しさん:2007/02/25(日) 22:19:43
かといって、Javaでのデザパタ実装をそのままPythonに移植するのは違うと思うな

166 :デフォルトの名無しさん:2007/02/25(日) 22:26:12
例えば Python に interface や抽象メソッドは不要なワケだし。
静的言語と動的言語じゃ話が違うんだよね。
全く不要なパターンやもっと簡単に実装できるものが出てくる。

167 :デフォルトの名無しさん:2007/02/25(日) 22:33:09
Pythonで書いてC++に落とせばいいじゃん

168 :デフォルトの名無しさん:2007/02/25(日) 23:03:11
>>149
オナニーをここでするんじゃねーよぼけ
デザパタのスレいけって何回言われたらわかんだよ
しね

169 :デフォルトの名無しさん:2007/02/25(日) 23:12:53
別にデザパタをPythonで実装する話自体はスレ違いではないと思うけど。
Javaとかの静的言語との好対照になるし、色々な設計方法を試してみるのは悪くない。
ただ、ちょっとパターンにとらわれすぎているかなって感じはするが。

170 :デフォルトの名無しさん:2007/02/25(日) 23:18:46
罵倒パターン

def response(comment):
 if len(comment.splitlines()) > 5:
  print "しね"


171 :デフォルトの名無しさん:2007/02/25(日) 23:19:50
zope.interfaceなめんな

172 :デフォルトの名無しさん:2007/02/25(日) 23:33:04
クラス志向&静的型付けかダックタイピングかどうかってこったわな。
C++だとテンプレートを使うとダックタイピング風のことも出来るのが
面白いんだが。

173 :デフォルトの名無しさん:2007/02/25(日) 23:49:47
PHPでもおぶじぇくとしこうできるよ.

174 :デフォルトの名無しさん:2007/02/25(日) 23:53:48
おぶじぇくとしこうさえできればなにでもよいというわけではありませんよ

175 :デフォルトの名無しさん:2007/02/26(月) 00:06:50
>163

なんかオブジェクト指向に感動した瞳キラキラな書き込みがこちらには
ちょっとまぶしいのですが、Pythonはもっとお下劣な言語ではないかと思います。

それに、どの程度コードを書換える必要が出てくるかは設計の上手下手の話であって、
オブジェクト指向の話ではない。現に、俺がオブジェクト指向風味に書いたコレは
アレをソレするのにあっちこっち書換えなきゃいけなくてorz


176 :デフォルトの名無しさん:2007/02/26(月) 00:11:24
だいぶ前のだけど

ttp://www.python.org/workshops/1997-10/proceedings/savikko.html

あと、ココ掘ればだいたいありそうな気もする

ttp://aspn.activestate.com/ASPN/Python/Cookbook/


177 :デフォルトの名無しさん:2007/02/26(月) 00:21:59
>>175
>どの程度コードを書換える必要が出てくるかは設計の上手下手の話であって、
>オブジェクト指向の話ではない。

ううん、違う。それこそがオブジェクト指向だと思う。
python による Chain Of Responsibility にちょっとだけ説明加えた。
http://www.h3.dion.ne.jp/~ytakagi/ChainOfResponsibility.html

コード、まだまだ問題かかえたままだけど、ちょっとだけ加えた説明で
なにか分ってきませんか?
僕はJavaをかじっていたので、どうしてもPythonでのパターンのコードが
ほしいのです。仕方ないので、自分で書くことにしました。

これが分らないと、アレをソレするのにあっちこっち書換えなきゃいけなくなるんです。

Javaでもそれは同じです。Rubyでも同じはずなんです。
デザパタ知らないと、オブジェクト指向できないんです。
Pythonにも必要なんです、どうしても。

ちょっとぐらい加えた説明じゃ、分らないかもしれないけど。

178 :デフォルトの名無しさん:2007/02/26(月) 00:26:02
住人総出で叩かれる前にデザパタスレ逝け

179 :デフォルトの名無しさん:2007/02/26(月) 00:30:51
もう別スレ立てたら?

180 :デフォルトの名無しさん:2007/02/26(月) 00:42:07
>>163
>オブジェクト指向が目標としてることを簡単にいえば、
>1万5000行のコードにかなり大きな手直しを必要とするような場合でも、
>何百行も修正するんじゃなくて、目の前の10行かそこいらを
>修正するだけで、それが出来るようにしようということです。
これって、Javaのwrite once, run anywhere主義の極端な例では?
そんなものとオブジェクト指向を結び付けられたら、pythonはオブジェクト指向じゃ
ありませんって言う話になる。
pythonでは「100行直して全体の可読性が上がるんだったら直したほうが正解」
って言うのが一般的な見方だと思う・・

181 :デフォルトの名無しさん:2007/02/26(月) 00:47:06
VBでもおぶじぇくとしこうできるよ.

182 :デフォルトの名無しさん:2007/02/26(月) 00:54:42
Simple is better than complex.

183 :デフォルトの名無しさん:2007/02/26(月) 00:58:36
>>180
>Javaのwrite once, run anywhere主義の極端な例では?

それは、クロスプラットフォームを目指そうという話でしょ?
なにも関係ないです。

>pythonはオブジェクト指向じゃありませんって言う話になる。

どうして? だって、Javaと比べても必要な機能は全部あるよ。
(抽象クラスやインターフェースも、やる気ならやる方法はあるし)
機能は全部あるんだから、誰か作ろうと思えば、当然にできるはず。
ただ、誰もやってくれないので、仕方ないので自分でやろうかなと。

去年の暮れぐらいに、初めてインストールして、本格的に勉強し始めた
のは今年に入ってからなんだけど、まだまだよく分からないところが
あるけれど、なかなか分りやすい言語だなと感心してる。

あと、僕はもともとJava使いだけど、Javaに比べてどうこうと
いいたいのではなく、Pythonもっと便利にしようよ、という話を
してるつもりです。どうせ自分で書くし(時間はかかるだろうけど)。

184 :デフォルトの名無しさん:2007/02/26(月) 01:02:23

def test( n ):
  if 0:


185 :デフォルトの名無しさん:2007/02/26(月) 01:04:36
>>183
君がやることに興味を持っている人は少ないので、いちいち報告してくださらなくて
結構です。つーか、報告するな。うざい。

186 :デフォルトの名無しさん:2007/02/26(月) 01:14:32
>>177
今のところ
下のコードと同じ動作しかしてない。
これより優れてる点を教えてくれ。

def test( n ):
  if 0:
    print "Alice"
  elif n < 100:
    print "Bob"
  elif n == 429:
    print "Charlie"
  elif n < 200:
    print "Diana"
  elif (n % 2) == 1:
    print "Elmo"
  elif n < 300:
    print "Fred"

for i in range(0,500,33):
  test(i)

187 :デフォルトの名無しさん:2007/02/26(月) 01:19:58
>>163
Smalltalk(というか暫定ダイナブック環境)のこの逸話のミソは、作業の速さや
手を入れた行数の少なさ(ちなみに10行というのはSmalltalkの平均的な
メソッドのコード量を指しているので「たった1メソッドを修正…」と読むべきだし、史実もそう)よりは

 “システムを止めたり再起動することなしに”

この変更を行なえたことにあるので Python が立脚する「オブジェクト指向」(ユーザー定義型の
オブジェクト指向)とはあんまり関係ない話だったりする。

188 :デフォルトの名無しさん:2007/02/26(月) 01:21:02
>>183
あ、なんかWORAの話は違ったけど、・
とにかくpythonでは>>163のたとえ話のような
より少ないコード変更で新しい機能を取り付けられる
ということは必ずしも美徳とされていない。特に
そのせいで全体の一貫性が失われるようなコード追加は悪い
コーディングの例と考えられるのが一般的傾向。

189 :デフォルトの名無しさん:2007/02/26(月) 01:21:25
>>183
Pythonに特化したデザパタ(あるのか知らんが)でもないかぎり、
デザパタ一般の話をここでするのはスレ違いも甚だしいことだとまだ気付かないのか

190 :デフォルトの名無しさん:2007/02/26(月) 01:21:56
>>186
・Chain Of Responsibilityパターンの内容
要求がやってくる。それを処理できるなら処理する。
処理できないなら、その要求を「次の人」にたらい回しする。
次の人がそれを処理できるなら処理する。
処理できないなら、その要求を「さらに次の人」にたらい回しする。
そして、さらに次の人へ……

・このパターンを使うメリット

このパターンのポイントは、最初の人に要求をポンと出してしまうと、
あとは連鎖の中をその要求が流れていき、適切な処理者によって要求が
処理されること。
このパターンを使わないと、要求を出す人が処理者たちの役割分担の詳細
まで知らなければならない。すると、部品としての独立性が損なわれてしまう。

要求を処理する ConcreteHandler(具体的処理者)のオブジェクトの関係が
動的に変化するような状況も考えられる。このパターンのようにたらい回しを
行っていれば、状況の変化に応じて ConcreteHandler(具体的処理者)を
組み替えることができる。
もしこのパターンを使わず、この要求ならこの処理者という対応関係が固定的に
書かれていたら、プログラムが動いている最中に処理者を変更することは難しい。

このパターンを使うと、個々の ConcreteHandler(具体的処理者)の処理は
その固有の内容に絞り込める。このパターンを使わないとすると、状況に
応じてどこに仕事を振り分けるかなどまで、個々の ConcreteHandler(具体的処理者)
に作りこまないといけない。
http://www.h3.dion.ne.jp/~ytakagi/ChainOfResponsibility.html

191 :デフォルトの名無しさん:2007/02/26(月) 01:33:20
Pythonのお勉強じゃなくね?
議論スレでも立てて思う存分やってくれ

192 :デフォルトの名無しさん:2007/02/26(月) 01:35:45
>>190
まず、ひとつの完全なチェインを作るためには必ず、
>alice.setNext(bob).setNext(charlie).setNext(diana).setNext(elmo).setNext(fred)
というような全員の名前が一回ずつ出てくる列を書かなければ、
列が破綻してしまう。しかし、このような列を"書く"ということは、
結局のところ、この順番のif elifを書いてるのと同等である。(したがってメリットが無い)
もし、途中でdianaとelmoの順番だけ変えるみたいなことができたら
たしかに、意味があるが、それがさっと出来るほどの巧妙さは無い。

193 :デフォルトの名無しさん:2007/02/26(月) 01:43:41
>>192
チェインを作る人と、チェインに投げる人は違う。
さらに言うと、スレも違う。

194 :デフォルトの名無しさん:2007/02/26(月) 01:47:00
>>192
列を作るのに、条件式を知っておく必要がないことも、>>186との違い

195 :デフォルトの名無しさん:2007/02/26(月) 01:50:31
>>193
いや、だから、チェインを作る人の労力がif elifを使う場合とCORを使うばあいで
なんら変わりが無い思うんだけど・・・?
で、使う人に対しては、aliceに対して投げてくださいと言うか、>>186のtest関数
に投げてくださいと言うかの違いしかない。これも大した差ではない。

>>194
条件式はもちろん
if alice.solvable(n):
  alice.solve(n)
elif bob.solvable(n):
  bob.solve(n)
式に書き換えれば、条件式を知る必要はないし、aliceたちの状態によって
動的に変化可能。

196 :デフォルトの名無しさん:2007/02/26(月) 01:56:41
あと、たとえばsolveメソッドの返り値を解けたら必要な文字列、解けなかったら0とかにしておけば
def solve( n ): return alice.solve(n) and bob.solve(n) and ...
とやれば、書く量も十分少なくてすむ。

197 :デフォルトの名無しさん:2007/02/26(月) 01:58:20
>>195
だいぶ近づいてるね。
あとは、処理する人が、動的に(もしくはあちこちで)リストに参加したり退会したり
できるようにしたら・・・はい、Chain of Responsibility.

リストが静的に決まっていたら、if - elif - ... を関数にしてもパターンと同じ事が
できるんだけど、あえてパターンから外れる必要もないからパターンに従う。

198 :デフォルトの名無しさん:2007/02/26(月) 02:06:09
>>192
うーん、それは違うんじゃない?

このパターンは、AbstractHandler(抽象的処理者)クラス
とConcreteHandler(具体的処理者)クラスの構造をどうするか、
というところがその肝心の内容と思うよ。

君がいっているのは、
要求を最初の具体的処理者に投げる部分だけだよね?
(対話的シェル部分。オリジナルのJavaコードだとメインクラスの
 メイン・メソッドの部分かな)
そうじゃなくて、抽象的処理者クラスと具体的処理者クラスの構造が
肝心かなめの部分。

一般論になるけど、オブジェクト指向も、深いこと考えずにやると
柔軟な変更ができなくなるから、変更部分をどうやって局所にとどめるか、
がカギだよね。

変更部分が、あっちにある、こっちにもあるというのじゃ、
オブジェクト指向なんかする意味ないから。モジュール構成の方が、最初の
設計の負担が少ないだけまだマシとなってしまう。
結局、抽象化をどうやってするかの方法論となると思う。

僕は、デザパタの趣旨の話をするのは全然かまわないんだけど、
スレ違いと怒る人がいるので、やめた方がいいんじゃないかな。

自分としては、Pythonでのコードがほしいから(Javaでのコードはとっくの昔に
全パターンあるんだから)、Javaやc++しか知らない連中に話しても仕方ないでの
ここでやってるんだが、なかなか難しい。

とはいえ、Python自身はとても気にいったので、自分はまだ力量不足かも
しれないけど、なんとかPythonによるデザパタ・コードは書いていきたい。

199 :デフォルトの名無しさん:2007/02/26(月) 02:13:16
鬱陶しいスレになっちゃったなぁ

200 :デフォルトの名無しさん:2007/02/26(月) 02:14:39
>>198
>とはいえ、Python自身はとても気にいったので、自分はまだ力量不足かも
>しれないけど、なんとかPythonによるデザパタ・コードは書いていきたい。

PHPでもデザパタは出来るよ。

201 :デフォルトの名無しさん:2007/02/26(月) 02:15:00
行数多いレスは読まなきゃ平気

202 :デフォルトの名無しさん:2007/02/26(月) 02:16:44
>>198
お願いだから自分のブログか何かでやってくれないか?

203 :デフォルトの名無しさん:2007/02/26(月) 02:22:20
抜けるためのメソッド
def exit( self ):
  self.__previous.setNext(self.__next)
入れ替わるためのメソッド
def swap( self, target ):
  target.__previous.setNext(self)
  self.setNext(target.__next)
  target.setNext(self.__next)
  self.__previous.setNext(target)

この辺があれば確かに使えるかもね。そのパターン。
__nextとsetNextしかないとif elifと同じだけど・・・

204 :デフォルトの名無しさん:2007/02/26(月) 02:26:26
いい加減やめたら?
雰囲気読めよ

Pythonでデザパタ。とかスレ作ったら?
そしたら俺もそっち行く

205 :デフォルトの名無しさん:2007/02/26(月) 02:31:38
>>197
しかし、やっぱり[alice,bob,...]
みたいな人の配列を作って、
順番変更は配列操作、
実行時は
def solve( n ):
  for p in people:
    if p.solve(n):
      return p.message
とかにしたほうが簡単な気がする。
__next だの __previousだのテクニカルすぎてやる意味が見出せない。

206 :デフォルトの名無しさん:2007/02/26(月) 02:33:22
>>204の直後に>>205って
おまえどういう神経してんの

207 :デフォルトの名無しさん:2007/02/26(月) 02:41:11
空気が読めない人はPerlを使うと幸せになれると思うよ。

208 :デフォルトの名無しさん:2007/02/26(月) 02:46:11
一応205はアンチデザパタのつもりで書いたんだけど・・・(・ω・)
205にJavaの人が答えてくれなかったら>>177のパターン絶対使わないし・・・

209 :206:2007/02/26(月) 02:51:29
>>208
そうだったのか。
ごめんなさい。まぢですまん

210 :デフォルトの名無しさん:2007/02/26(月) 03:01:19
>>208
いや、だから、
君は抽象的処理者と具体的処理者の部分を全然変更してないだろ。

そして、そうなっているということは、
たくさんのクラスを無修正で済ませることができているということ。
変更を局所化できているということ。

君はすべてを、抽象的処理者と具体的処理者を全然使わない方法で実装できる。

そのとき、どこに変更部分があるかは気まぐれで、
あっちこっちと直さないといけなくなるだろう。
オブジェクト指向を使う意味が全然ない、オブジェクト指向のコードに
することもできる。モジュール構成より疲れるだけの。

天才ダン・インガルスが変更したのは、たしかにメソッド一つだったかもしれない。
でも、それはメソッド一つですむように設計しておいたからだ。

君の変更は、メインクラスのメイン・メソッドの内容にとどまる。
メインクラスには、他のメソッドもいろいろもてるだろう。
アナザー・メソッドを定めておいて、それを実行すれば、
元のコードの変更はゼロで、コードの追加ですべてできるかも
しれない。

以上、デザパタ論議は終わり。自分は当面、参加しない。

211 :デフォルトの名無しさん:2007/02/26(月) 03:05:29
>>どの程度コードを書換える必要が出てくるかは設計の上手下手の話であって、
>>オブジェクト指向の話ではない。

>ううん、違う。それこそがオブジェクト指向だと思う。

悪いんだけど、他所いってやってくれない? あんた根本的に何か勘違いしてるよ。


212 :デフォルトの名無しさん:2007/02/26(月) 03:11:11
宗教って怖いね

213 :デフォルトの名無しさん:2007/02/26(月) 03:22:22
怖いね。


214 :デフォルトの名無しさん:2007/02/26(月) 03:29:31
怖いね.

215 :デフォルトの名無しさん:2007/02/26(月) 03:47:08
後は放置で

216 :デフォルトの名無しさん:2007/02/26(月) 04:49:56
誰かが立てたっぽいな。

デザパタ + python
http://pc10.2ch.net/test/read.cgi/tech/1172431242/

217 :デフォルトの名無しさん:2007/02/26(月) 04:52:12
遠いお国で幸せになってる人間を、どうこう言うほど卑しくないつもりだw

218 :デフォルトの名無しさん:2007/02/26(月) 04:56:43
デザパタってのは数式の公式みたいなもんだなあと改めてオモタ。
勉強しているときは何の役に立つのかピンと来ない。
確かに便利そうではあるが自分のこととして実感できない。
そして、実際に役に立つことが分かるようになった頃には
自分にとってごく当たり前の、普段使いの道具になっている。
勉強していたとき、なぜこの便利さが実感できなかったのかと不思議に思う。
できることなら当時の自分に教えてやりたい。
でも、その説明を聞いても当時の自分にはやっぱりピンと来ないんだろうなあ。

219 :デフォルトの名無しさん:2007/02/26(月) 05:05:24
>>218
>>216

220 :デフォルトの名無しさん:2007/02/26(月) 05:07:49
>>219
すまん、パピコしてから気付いた。あと「数式の公式」ぢゃなくて「数学の公式」だった。

221 :デフォルトの名無しさん:2007/02/26(月) 09:07:09
前のフォームのある画面からPOSTでアクセスされ、どんな変数名が渡ってくるか固定ではない場合、
その変数名と値を収集するにはどうしたらいいのでしょうか?

222 :デフォルトの名無しさん:2007/02/26(月) 11:46:01
>>221
デザパタとオブジェクト指向を勉強すれば分かるよ

223 :デフォルトの名無しさん:2007/02/26(月) 12:05:42
・・・などと、とんちんかんな回答をもらわないように、
使っているライブラリ、実行環境、できれば問題を再現する小さなコードなど、
問題を特定するのに必要な情報を書きましょう。

224 :デフォルトの名無しさん:2007/02/26(月) 12:14:55
>>221
質問の仕方が悪い.

〜するには何パターンを使えばいいのですか?

これが、このスレでの正しい質問のしかた.

225 :デフォルトの名無しさん:2007/02/26(月) 12:32:53
>>221
import cgi
FormData = cgi.FieldStorage()

print "Content-Type: text/text\n"
for KEY in FormData.keys():
 print "(%s, %s)" % (KEY, str(FormData.getlist(KEY)))

226 :デフォルトの名無しさん:2007/02/26(月) 12:41:30
http://video.google.com/videoplay?docid=1189446823303316785
Python 3.0 final: June 2008
Python 2.6 final: April 2008

227 :デフォルトの名無しさん:2007/02/26(月) 12:46:26
>>225
適当に書いたけど正しくは「text/plain」だった

228 :221:2007/02/26(月) 13:09:15
>>222-227
ご返答ありがとうございます。
情報不足で申し訳ありませんでした。
>>225さんのソースを元に作成してみます。

229 :221:2007/02/26(月) 15:08:56
>>225のサンプルを元に作成してみました。
実行した結果、何も表示されませんでした。
原因はresult.pyの「for KEY in FormData.keys():」のループが1度も入りません。
→FormDataの値を確認したら「FieldStorage(None, None, [])」で値が取得出来なかった模様。
期待値としてtest.htmlのtext1に「123」test2に「abc」を入れ
result.pyの画面で「test1/123(改行)test2/abc」がブラウザで表示されることです。
改善策を教えて下さい。よろしくお願いします。

--- test.html(form部分のみ/nameのtest1とtext2が可変の名前になる所) ---
<form action="result.py" method="post">
<input type="text" name="text1">
<input type="text" name="text2">
<input type="submit" value="実行">
</form>

--- result.py ---
import cgi
from mod_python import apache
from string import *
def handler(req):
 FormData = cgi.FieldStorage()
 req.write("Content-Type: text/html\n\n")
 req.write("Content-Type: text/plain\n")
 req.write("<html><head><title>test</title></head><body>")
 for KEY in FormData.keys():
  data_column = str(KEY) + "/"
  data_value = str(FormData.getlist(KEY)) + "<BR>"
  req.write(req, data_column)
  req.write(req, data_value)
 req.write("</body></html>")

230 :221と229:2007/02/26(月) 15:13:41
req.write("</body></html>")
の次の行に
return apache.OK
が入ります。

231 :デフォルトの名無しさん:2007/02/26(月) 15:24:30
>>229
普通のcgiじゃなくて、mod-python か。
そっちは良くわからん。

とりあえず、Content-Typeは1回だけしか書けないはずなので、
req.write("Content-Type: text/plain\n")
の行は削除してみてくれ

232 :229:2007/02/26(月) 15:38:26
>>231
mod-pythonの方です。
Content-Typeの所は指定の通り、消してみましたが変化ないようです。

FormData = cgi.FieldStorage()

この時点でFormDataに何も値が持ってこられない時点で、
エラーにはならないとはいえmod-pythonでは使えないのかな?

233 :デフォルトの名無しさん:2007/02/26(月) 16:04:04
>>232
マニュアルさっと見た限り、
from mod_python import util
form_data= util.FieldStorage(req)
とかでいけそうな気がします。

あと、ヘッダについては req.write() するのではなく
req.content_type = "text/plain"
のようにするみたいです。

234 :デフォルトの名無しさん:2007/02/26(月) 16:10:31
cgiモジュールは普通のCGIで使うやつだから、mod-pythonの場合は根本的に違うんじゃないかな。
ちょっと調べたら、

Content-Typeの設定は
req.content_type = "text/plain"
で設定する。

ttp://www.python.jp/doc/contrib/modpython/pyapi-mprequest-meth.html
を読むと、クライアントからのデータは readメソッドで読めるようだ。
POSTの生データは、KEY1=VALUE1&KEY2=VALUE2&・・・だから
あとは自力でなんとかしてみれ。

235 :232:2007/02/26(月) 16:44:37
>>233-234
返答ありがとうございます。

>>233さんのutilをインポートする件は、表示出来ず、
>>234さんのContent-Typeでreadメソッドでも表示出来ませんでした。
何か手段が無いかと別のメソッドを調査してみた所、
readではなくreadlineのメソッドでフォームの値が収集出来ました。
「text1=123&text2=abc」って感じに。
あとはこの文字列を砕いて表示出来るように頑張ります。
記念に同じ疑問で今後引っかかった方用にソース残しておきます。

--- result.py ---
from mod_python import apache
from string import *
def handler(req):
req.content_type = "text/plain"
aaaaa = req.readline()
req.write("<html><head><title>test</title></head><body>")
req.write(aaaaa)
req.write("</body></html>")
return apache.OK

みなさん、ご協力ありがとうございます。

236 :デフォルトの名無しさん:2007/02/26(月) 16:44:41
つーか、text/htmlとtext/plainを同時に指定しちゃだめだろw
あと、>>229の書き方だと、空行の入る位置がおかしいから
2個目のContent-typeはドキュメント内に表示されるぞ、

>>234
それやるとデコードを自分でやる羽目になるので、素人にはお勧めできないw

237 :デフォルトの名無しさん:2007/02/26(月) 16:46:40
こんな感じか

from mod_python import apache, util

def handler(req):
 req.content_type = "text/plain"
 form_data= util.FieldStorage(req)
 for field in form_data.list:
  req.write(field.name+"/"+field.value+"\n")
 return apache.OK

238 :デフォルトの名無しさん:2007/02/26(月) 16:52:03
>>226
ヒゲ!ヒゲ!

239 :235:2007/02/26(月) 17:00:34
>>236-237
ご返答ありがとうございます

>>237さんの便利ですね。
1項目ずつ分かれていますから。
自分のより、こちらをベースにしたいです。

本当にありがとうございます。


240 :デフォルトの名無しさん:2007/02/26(月) 17:16:02
やっぱりprint 関数は見た目はあんまりうれしくない感じだ・・・
print('x\n', 'y')とかちょっとperlっぽい感じがする、・・・、
まあp=printとか[print(x) for x in arry]
とかいろいろ悪さが出来るのは面白いだろうけど、・・・

241 :デフォルトの名無しさん:2007/02/26(月) 17:39:10
>>226
ず〜と 水みたいなのを握り締めてるのが気になってしょうがない

242 :デフォルトの名無しさん:2007/02/26(月) 17:49:29
new style class がraise出来なかったのは結局解決したってことなんだろうか・・・
短くてよく分からんかった・・・

243 :デフォルトの名無しさん:2007/02/26(月) 17:58:45
a = { f(x) for x in S if P(x) }

↑これやばいwかっこよすぎ

244 :デフォルトの名無しさん:2007/02/26(月) 21:02:36
nonlocal 萎え

245 :デフォルトの名無しさん:2007/02/26(月) 22:15:25
  _  ∩
( ゚∀゚)彡 おっぱい!おっぱい!
 ⊂彡


246 :デフォルトの名無しさん:2007/02/26(月) 22:24:03
perlでいうCPANみたいなものってpythonではどこになるんすか?

247 :デフォルトの名無しさん:2007/02/26(月) 22:30:25
>>246
ぱいぱい

248 :デフォルトの名無しさん:2007/02/26(月) 22:31:00
ぱいぱい
http://cheeseshop.python.org/pypi

249 :デフォルトの名無しさん:2007/02/26(月) 22:52:49
>>247-248
ありがとん。

250 :デフォルトの名無しさん:2007/02/27(火) 03:10:10
チーズショップが正式名称になったんじゃないの?
まあ、urlに残ってるけど・・・

251 :デフォルトの名無しさん:2007/02/27(火) 15:05:15
最新Pythonエクスプローラ 〜Django,TurboGears,Twisted,IronPython 完全攻略
ttp://gihyo.jp/book/2007/978-4-7741-3042-2

252 :デフォルトの名無しさん:2007/02/27(火) 15:13:12
お、よさげだね

SDの python 関連記事のまとめかな?


253 :デフォルトの名無しさん:2007/02/27(火) 17:59:44
それにしても TurboGears ってpython2.5がでて半年たつのにいまだに
2.5に対応できないでいる。寄せ集めツールズの弱点がでた感じ。

254 :デフォルトの名無しさん:2007/02/27(火) 20:48:06
一番遅いのに合わせてるってこと? どいつだろう。

255 :デフォルトの名無しさん:2007/02/27(火) 20:51:58
2.5に未対応でもほぼ無問題.
functoolsとか使いたがるヤツはたいてい使い物にならない機能オタ.

256 :デフォルトの名無しさん:2007/02/27(火) 21:05:18
>>> [   'A']
['A']

こっちみんなよw

>>> ['A'   ]
['A']

こっちみんな!w

257 :デフォルトの名無しさん:2007/02/27(火) 21:08:13
>>256
和んだw

258 :デフォルトの名無しさん:2007/02/27(火) 21:38:27
吹いた

259 :デフォルトの名無しさん:2007/02/27(火) 21:43:49
>>256
その発想はなかったわwwwww

260 :デフォルトの名無しさん:2007/02/28(水) 01:12:51
>>256
Python >>> Ruby が決定したなw

irb(main):001:0> [   'A']
=> ["A"]
irb(main):002:0> ['A'   ]
=> ["A"]


261 :デフォルトの名無しさん:2007/02/28(水) 02:00:28
>>260
あなたのおかげで、やっと>>256の意味がわかった。
ありがとう、面白いねこれ。

262 :デフォルトの名無しさん:2007/02/28(水) 07:48:17
>>>> ('_')
>'_'
>>>> ('_')
>'_'
>>>> ('_',)
>('_',)


263 :デフォルトの名無しさん:2007/02/28(水) 09:49:37
Python Jobs - Average Salary for Python Skills
ttp://www.itjobswatch.co.uk/jobs/uk/python.do
> Average Salary £43,149

  (,,゚Д゚) 43149ポンドっていくらだ・・・・

Σ(,,゚Д゚) 1000万超?!

  (,,゚Д゚) ポカーン

264 :デフォルトの名無しさん:2007/02/28(水) 09:50:58
なのになんで俺無職なん?

265 :デフォルトの名無しさん:2007/02/28(水) 09:53:48
Over1000マソのサラリーに求められる
仕事の質や量を考えられないようなヤツが無職なのは当然

266 :デフォルトの名無しさん:2007/02/28(水) 10:20:58
決め打ちの煽りワロス

無職仲間ハケーン

267 :デフォルトの名無しさん:2007/02/28(水) 10:35:53
>>264,266
Python使えてIQ140以上で英語ができて
IT系の特定分野でとんがった技術持ってて
自分で課題設定できて絶え間なく成果を出せるようなスキルがあれば
Googleに入れるぞ!

そしたらストックオプションで人生の半分くらい引きこもっても生きてられるぞ!!

おまえらガンガレ!!

268 :デフォルトの名無しさん:2007/02/28(水) 11:44:10
>自分で課題設定できて絶え間なく成果を出せる

....................o.....rz


269 :デフォルトの名無しさん:2007/02/28(水) 13:08:57
有能を語っているうちに興奮して態度がでかくなる無能って
どうしようもなくミジメだよな。

270 :デフォルトの名無しさん:2007/02/28(水) 14:04:14
そんなやつならわざわざGoogleに入るまでもない。

86 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)