OOPの練習

やっと、やろうとしてたことができた。前にPHPを覚えようとしたときPHPでも同じことをやってみたけど、今回のpythonでは、妙なところで嵌ってしまった。(前のエントリ)デフォルト引数を使わなければスムーズだったと思うんですが。

クラスのインスタンスを使ってHTMLタグの構造を構成して、トップを文字列評価すると全体のHTML文字列が取得できるというOOPの練習。

#! /usr/bin/python
# -*- coding: cp932 -*-
class Tag(object):
name = None
def __init__(self, children = None, attrs = None):
if children is None:
children = []
if attrs is None:
attrs = {}
self.children = children
self.attrs = attrs
def __str__(self):
childrenExp = ' '.join(map(lambda(x): str(x), self.children))
attrsExp = ''
for k in self.attrs:
attrsExp += ' %s="%s"' % (k, self.attrs[k])
return ('<%s%s>' + childrenExp + '</%s>') % (self.name, attrsExp, self.name)
def addAttr(self, name, value):
self.attrs[name] = value
def addChild(self, child):
self.children.append(child)
class Html(Tag):
name = 'html'
class Body(Tag):
name = 'body'
class H1(Tag):
name = 'h1'
html = Html()
body = Body()
h1 = H1(["Hello, Python!"], {"style": "color:red;"})
body.addChild(h1)
html.addChild(body)
print html

実行結果

<html><body><h1 style="color:red;">Hello, Python!</h1></body></html>

変なところで嵌ってたから、もう一度復習が必要だと思いました。

2 Comments

  • 以前、今より時間的余裕がある頃、「みんなのPython」を一通り読んだんですが、もう忘れてます。。。
    やっぱり、書かなきゃダメですね。
    最近はロクにPGをやってないので、ヤバいです。。

  • 確かに手を動かさないと理解できないかも。1日30分とかできるとチリも積もるんだろうけど。
    pythonが、自分の肌に合う言語かどうかわからない(合いそうとも思えなかった)けど、食わず嫌いのままでは判断もできないから、ちょっと触ってみてる。
    今のところの印象では、良い言語なのかもしれないけど、楽しい言語ではないかな。

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.