なりなり日記

Appleと折りたたみ自転車(BROMPTON / Tern Vektron S10 / BESV PSF1)の情報を中心に発信中!

鎌倉三十三観音 御朱印巡り(光触寺、明王院、浄明寺、報国寺)と北鎌倉ぬふ・いちのスープカリー

こんにちは、なりなりです(^ ^)

奥さんにお付き合いして、鎌倉三十三観音の御朱印巡りをしてきました。

僕の今日の目的は、北鎌倉ぬふ・いちのスープカリーです(^-^)

光触寺(こうそくじ、七番札所)

駅からは少し遠いので、バスがお勧め。十二所バス停から3分、ハイランド前バス停から6分です。



門を通って中に入ると、光触寺(こうそくじ)の説明が。


御朱印は本堂の脇で書いていました。


塩嘗地蔵(しおなめじぞう)


奥様は御朱印をゲット!

御朱印って、何ですかね。
僕的には、スタンプラリーやポケモンGOと大差ない様な…(⌒-⌒; )

明王院(みょうおういん、八番札所)


さて、徒歩で明王院に向かいます。


明王院は、法事中だったからなのか、いつもなのかは分かりませんが、境内撮影禁止となっていました。


こちらが御朱印です。

浄明寺(じょうみょうじ、九番札所)

多くのお寺同様に、門を入ったところで御朱印をお願いして中に入ります。


本堂でお参りをした後、境内の喜泉庵(きせんあん)で抹茶を頂きます。



とても風情がありますね(^-^)




とても静かに落ち着いて過ごせました。畳にも座れますが、基本が椅子なので年配の方でも寛げます。



生菓子と抹茶のセットが1,000円なので、まあまあします。でも寛ぎのひと時は何物にも代え難い。

抹茶は冷たいのと暖かいのが有ります。


こちらが御朱印。

報国寺(ほうこくじ、十番札所)

さて、本日最後の報国寺に向かいます。

本堂左手の事務所で御朱印を貰います。

ここには竹林の見事な庭園が別料金で、その中に抹茶を頂けるお店も有ります。


こちらが御朱印。

御朱印巡りはここまで。

北鎌倉ぬふ・いち

ぬふ・いちは営業時間が定まっておらず、カレーが無くなったら閉店なので、報国寺を出たら電話して予約しました。当日予約も可です。

ぬふ・いちは最寄りが北鎌倉ですが、直接向かうバスは無いので、バスで鎌倉駅に戻って、横須賀線で北鎌倉駅へ。

北鎌倉駅からは建長寺に向かいます。

[tabelog:599805:detail]

ビーフシチューで有名な去来庵が目に入りますが、



振り向けば、ぬふ・いちへの階段が有ります。



店内は、まんま、一般家庭のダイニングの様です。




こちらが通常メニュー。



ビーフステーキとタンドリーチキンが限定6食のメニューです。

ただ、お勧めは鎌倉野菜が付いたメニューです。

  • 鎌倉野菜のスープカリー
  • 鎌倉野菜のスープカリーセット(デザート付き)
  • 鎌倉野菜のスープカリー&ビールセット

のどれかでしょう。

奥さんは鎌倉野菜のスープカリー


僕は鎌倉野菜のスープカリー&ビールセットにしました。

ビールセットはライスの代わりに、骨つきソーセージとビールが付きます。

暑かったのでビールに惹かれました(^-^)


骨つきソーセージも美味しかったです。

スープカリーは、よくある北海道スープカレーとは一線を画す、というか、ご店主の完全オリジナルと思われます。

カリーは

  • 少ししょっぱい
  • 具材無し

のため、正直、普通のカレーを期待すると裏切られるかもしれません。

でも、ここのカリーは、何というか、鎌倉野菜を美味しく食べるためのスープ、というより、付けダレなんですよ。

野菜の多くは素揚げや焼いたものなので、野菜の天ぷらをカレー味のつゆに付けて食べる感じです。

これが、鎌倉野菜を最高に美味しく頂けるんですよ。

だから、鎌倉野菜のセットが一番!


今日は10時には鎌倉駅に到着、13時からカリーを頂いて、14時には北鎌倉駅を出ました。

このくらいのスケジュールで動くと、週末の鎌倉を楽しく回れます(^-^)

【JavaScript入門】今見ているサイトのタイトルとURLをクリップボードにコピーする

こんにちは、なりなりです(^ ^)

Pythonで作るタイマープログラムから脱線してJavaScriptの話になっていますが、今回もJavaScriptの話です。

簡単に出来そうで欲しい、JavaScriptというかbookmarklet(ブックマークレット)が、今見ているサイトのタイトルとURLを取得してクリップボードにコピーしてくれるものです。

僕の場合、ブログを書いて、Facebookページに投稿するのに必要なんです。最初は自動投稿してくれるプラグインなどを使っていた気がしますけど。


簡単に出来ることを期待していましたが、意外と厄介でした…


まず、タイトルとURLを取得するとこ自体は超簡単です。

document.title;  #表示中のHTMLのタイトル
location.href;   #表示中のHTMLのURL

それぞれ、文字列を返してくれます。ここまではいい。


JavaScript クリップボード コピーで調べると

Document.execCommand() - Web API | MDN

documetオブジェクトで選択済みの範囲の文字列を

documet.execCommand('copy')

でクリップボードにコピー出来るようです。

が、文字列変数をdocumetに格納するのが一筋縄ではいかず、面倒になって断念(⌒-⌒; )

これは、Pythonistaの出番では?


ということで、コピペは自力でやることとして、タイトルとURLを表示してくれるbookmarkletを作ることにします。

簡単なのがテキストをポップアップ表示してくれるpromptを使うことで

prompt('ポップアップのタイトル','表示するテキスト')

でOK。


bookmarkletの基本は

- JavaScriptを一行に繋げてブックマーク化したもの
- javascript:(:に続けてjavascriptを記述)をブラウザのURL欄に入力、又はブックマーク化する
- 改行無し
- スペースは%20(半角)で置き換える
- 改行(¥n)は%5Cn(半角)で置き換える

ですが、今回は一文でだけなので簡単ですね。

javascript:prompt('タイトルとURL',document.title+'\n'+location.href);

これを適当なサイトを表示させて作ったブックマークのプロパティ(URL)を上記に置き換えれば


サイト表示中にブックマークを選ぶとこの様になるので、表示されたテキストを選んでコピペして使います。

超簡単な割には、そこそこ便利ですよね(^-^)

【JavaScript入門】簡単なタイマーを作る

こんにちは、なりなりです(^ ^)


JavaScriptなら誰でもプログラミングが始められる! - なりなり日記
こちらにJavaScriptに関して簡単にまとめましたが、手始めとして、

【Python入門】Pythonistaでタイマーを作る(2) - なりなり日記

【Python入門】tkinkerでタイマーを作る - なりなり日記

こちら、Pythonで作ったのと同じ様なカウンターを作ってみます。

作成したプログラム、counter.htmlの中身がこちら。

<html>
<head>
<title>Timer</title>
</head>

<body>

<form name="timer">
<input type="text" name="textbox" value="10">
<input type="button" value="START" onclick="countdown()">
</form>


<script type="text/javascript">
var count;

function countdown(){
   count = Number(timer.textbox.value);
   //alert(String(count));
   
   if(count <=0)
       alert("時間です!");
   else{
       setTimeout("countdown()", 1000);
       count--;
       timer.textbox.value = String(count);
   }
}
</script>

</body>
</html>


<form>から</form>でform(タイマーと命名)の中に、text(textboxと命名)とボタン(今回は必要無いので名前は付けません)のウィジェットを定義しています。

button スタートを押す(クリックする)とcountdown関数が実行されます。

記述方法が異なりますが、PythonでUIを構築するのと同様ですね。

formは<body>と</body>の間、<script>の上に記述します。


後は関数contdownの定義です。

Number(timer.textbox.value);

は定義したtimerのtextboxの値を数値に変換します。

ウィジェットに名前を付けていない場合は

timer.elemnts[0].value

と記述します。elemnts[]の中の数値は0をスタートに定義した順番となります。

今回は0:text、1:buttonです。

setTimeout("countdown()", 1000);

が今回の肝で、1000ms後にcountdown関数を呼び出します。
関数の中で再起呼び出しをすることによって1000ms毎に連続実行する作りは、Pythonで作ったプログラムと同じです。

alert("時間です!");

これで簡単にメッセージウィンドウが開けるので入れてみました。


<body>から</body>をこのエントリー内で直に書き込むと下記の様になり、ボタンを押すと実行されます。






当たり前だけど、JavaScriptはブログ内でも普通に実行できるんですねー、素晴らしい!

せっかくJavaScriptの勉強を始めましたが、どうやら去年あたりから、DropboxやGoogle Driveなどで一斉にJavaScriptをURL指定して直接実行することが出来なくなったようなんですよ。

それなら安価なレンタルサーバーでも借りようかと(ロリポップ!の最安は月100円!)思ったのですが、当面は必要ならブログに埋め込むで良いかな。

そのうち興味を持ったら借りてみるかも。

ブラウザから直接実行出来るブックマークレットも勉強したい。


Python、JavaScript(HTMLの勉強も含む)と始めてみて、自分で出来ることが格段に増えて楽しいです。

特に、僕は、トレラン、サイクリング、テニス(先週、会社のテニス部に入ってやる気満々!)と楽しみがスポーツばかりだった(このブログは趣味と実益を兼ねてますが)ので、プログラミングを趣味にするのもいいかも(^-^)

JavaScriptなら誰でもプログラミングが始められる!

こんにちは、なりなりです(^ ^)

Pythonの勉強をしていますが、同時にJavaScriptにも興味を持って調べています。

JavaScriptとは何なのか!初心者向けに徹底解説 | TechAcademyマガジン
例えばここなどて、JavaScriptって何なの?という疑問に答えてくれます。


【データから紐解く!】人気プログラミング言語を徹底比較! | TechAcademyマガジン
Pythonも人気だけど、JavaScriptも人気らしい。最も、僕はプログラマーになる訳では無いので、人気とか関係は無いですけど(⌒-⌒; )


JavaScript | MDN
JavaScriptに関しての詳細にはこことか。


JavaScript入門
入門には、こことか分かりやすいです。


JavaScriptに興味を持ったのは

  • 実行環境を選ばず、Pythonの様にインタプリタをセットアップする必要も無い
  • ブラウザのブックマークから実行出来るブックマークレットが便利
  • HTMLと親和性が良いので、ホームページから情報を取り出すのが簡単そう

だからです。

C/C++などの一般的はプログラミング言語を概ね理解している僕からみたJavaScriptに関する理解を以下にまとめます。

文法的には、ほぼほぼC/C++ですが型宣言の必要は無く、一部、PASCAL風のところも有り。

JavaScriptとは

実行環境はブラウザで、ほぼ全てのブラウザ(JavaScriptをONにすれば)で実行できる。

テキストエディタとブラウザのみで開発、実行出来る。

文法はJAVAとは全く異なる。

基本的には.htmlファイル内の<script>と</script>の間に記述するスクリプトで、HTML内に埋め込めるプログラムである。

特別なものが何1つ必要ないため、最も身近なプログラミング言語である。

最低限のひな形

<html>
<head>
<title>タイトル<title>
</head>
<body>
<script>
   <script>と</script>の間にJavaScriptを記述
</script>
</body>
</html>


変数宣言

var 変数名;
var 変数A, 変数B, 変数C;
var 変数名 = 値;
  • 変数名の最初は英文字でなければならない
  • ローカルとグローバルの考え方はCと同じ
  • 変数の型は宣言しない


関数宣言

function 関数名(引数){
   処理;

    return 戻り値;(無くてもOK)
 }


文の区切り

「}」の後ろ以外には必ず「;」が必要。

文字列表示

document.write('文字列') 又は document.wirte(数字)

改行する場合は

document.write('文字列<br>')

とする。

<br>はHTMLの改行コードで、数字を出力して改行したければ

document.write(数字);
document.write("<br>");


加算

'文字列' + 数字が可能で、結果は文字列となる。

インクリメント、デクリメント表記i++, i--可能。

数学関数の利用

標準で用意されている組み込み関数が、特にインポートなどせずに利用出来る。

Math.pow(a,b), Math.sin(a), Math.log(a)などがある。

C++のmathクラスを用いているかと思いきや、常用対数Math.log10()は無く、乱数発生Math.random()が有ったりする。

複素関数は標準では使えないが、math.jsを使って実現できる

math.js | an extensive math library for JavaScript and Node.js

if, switch, for, while文

 Cと同じ。

例えば

 for (var i=1 ; i<=10 ; i++){
  document.write("繰り返し文です。<br>");
 }


配列

 var a = new Array()

宣言時に配列の大きさを考える必要は無い。

breakとcontinue

 Cと同じ

コメントアウト

C言語と同じ。

// 1行だけのコメント

/* 
    複数行に渡る
    コメント
*/

<script>外のHTMLスクリプトでは

<!--
    複数行に渡る
    コメント
-->

で複数行に渡って指定する。

JavaScriptの外部ファイル

拡張子は.js(JavaScript)。

起動させるには、HTML内に一行書くだけ。

<html>
<body>
<script type = "text/javascript" src="jsファイルのパス"></script>

<script>
   //JSファイルで定義した関数が使用可能。
</script>
</body>
</html>


ブックマークレット

- JavaScriptを一行に繋げてブックマーク化したもの
- javascript:(:に続けてjavascriptを記述)をブラウザのURL欄に入力、又はブックマーク化する
- 改行無し
- スペースは%20(半角)で置き換える
- 改行(¥n)は%5Cn(半角)で置き換える


このエントリーを書いて知ったこと

HTMLやJavaScriptのソースコードをブログで表示させるのは結構面倒だけど、はてな記法を使えば簡単で

>||と||<の間に書くことで、コードがそのまま表示出来る。

HTMLでよく使う「<」は「&lt;」に、「>」は「&gt;」に置き換えれば、タグでは無く文字として表示出来る

最初はHTMLで何とかしようと思いましたが、

HTMLのタグ<pre>と</pre>の間に書いた場合だと、上の方法で<と>も置き換えの必要がある。

ため、面倒でした。


【JavaScript入門】簡単なタイマーを作る - なりなり日記

実際にJavaScriptでプログラミングしてみましょう!

【Python入門】tkinkerでタイマーを作る

こんにちは、なりなりです(^ ^)

【Python入門】Pythonistaでタイマーを作る(2) - なりなり日記

Pythonistaでのタイマーの使い方を勉強しましたが、一度脱線して、PCならどうするのか?やってみます(^-^)

TKと聞けば、プラグラムに詳しい人はピンと来ますよね、きっと。僕は知りませんでしたけど。

PythonにはGUIを構築するためのモジュールTKが標準で組み込まれているのです。

僕はGUIとかイベントドリブン型のプラグラムは、ポーランドのC++ Builder(Visual BASICのC++版といいましょうか)でしか組んだことが無いので、ソースコードだけで書くというのがピンと来ないんです(⌒-⌒; )

tkinkerを使ったタイマーの例がこちら。

# coding: utf-8

from tkinter import *

def timer():
   time = int(buff.get())
   if time > 0:
       frame.after(1000, timer)
       time -= 1
       buff.set(str(time))

frame = Tk()

buff = StringVar()
buff.set('10')

entry  = Entry(frame, textvariable = buff)
entry.pack(side='left')
button = Button(frame, text = 'START', command = timer)
button.pack(side='right')

frame.mainloop()

一番上の方に定義したtimer関数の中に有りますが、tkにはthreadingのTimerに似たメソッドafterが有るので、threadingは不要です。

今回は、tkinkerの中のテキスト入力ボックスのEntryとButtonのウィジェットを使います。

では、インタラクティブモードでウィジェットが出来上がる様子を見ましょう!

frame = Tk()

でtkのインスタンスframeを生成し


buff = StringVar()
buff.set('10')

tkのウィジェットと文字列をやりとりするにはStringVarでインスタンスを生成します。ここではsetメソッドで10に初期化。

entry  = Entry(frame, textvariable = buff)
entry.pack(side='left')

frame上にEntryのインスタンスを生成し、textvariable(変化する文字列)にbuffを関連付けてから、frameに詰め込んで表示(pack)します。この時、Entryは左に配置。


するとこうなります。

更に、

button = Button(frame, text = 'START', command = timer)
button.pack(side='right')

Buttonのテキストに「START」を指定して、ボタンを押した時のコール関数に「timer」を紐付けて、frame上にインスタンスを生成します。Buttonは右に配置。


するとこうなり、mainloopの実行でボタン押し待ちの状態になります。


こんな感じに、ソースコードだけでGUIとかイベントドリブン型のプラグラムとか作れるんですね。


実は、この辺の感覚が無かったので

初めてのGARMIN Connect IQプログラミング vol.3【基礎編】 - なりなり日記

GARMIN Connect IQのプログラミングが暗礁に乗り上げてしまったのですが、ひょっとして再開出来るかも!

追記

Windows上で.pyをPythonに関連付けてある場合、ダブルクリックでプログラムが起動しますが、同時にShell Windowが開いてしまって鬱陶しいです。

この場合、拡張子を.pywにするだけで解決します!

.pyはpython.exeに、.pywはpythonw.exeに関連付けられていることに依るようですが、詳細は分かりません(⌒-⌒; )

VBS(Visual BASIC Script)を使う手も有るようですが、拡張子変更の方が遥かに簡単ですね(^-^)

【Python入門】Pythonistaでタイマーを作る(2)

こんにちは、なりなりです(^ ^)

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,220


【Python入門】Pythonistaでタイマーを作る(1) - なりなり日記

前回、Text Fieldの表示が更新されないという問題にぶつかりましたが、これには、スレッドを使うのが良いようです。

import ui
import threading

def count_down(textfield):
  global times
	
  if times > 0:
    t = threading.Timer(1, count_down,args=[textfield])
    t.start()
    times -= 1
    textfield.text = str(times)
	
def button_tapped(sender):
  global times
	
  textfield = sender.superview['textfield1']
  times = int(textfield.text)
  count_down(textfield)
		
v = ui.load_view()
v.present('sheet')


キーとなるのが

import threading

threadingモジュールのインポートです。

t = threading.Timer(1, count_down,args=[textfield])

その中のTimerメソッドで1秒後に自分自身の関数を再帰的に呼び出すことで、繰り返し実行されます。

Timerメソッドは「args=」で呼び出す関数の引数を指定出来ますが、似たようなメソッドで引数指定出来ないものも有るので、常に

threading.Timer(1, lambda:count_down(textfield))

この様にラムダ式を使った方がスマートかもしれません。

さあ、これで、タイマーの基本的は作り方が分かりましたね(^-^)


【Python入門】tkinkerでタイマーを作る - なりなり日記

続きはこちらですが、一回、脱線します!

テニスファン待望!?WOWOWがオンライン解約出来るようになった!

こんにちは、なりなりです(^ ^)

テニスファンならWOWOWとGAORAを上手く解約・再加入して視聴料を節約しよう! - なりなり日記

以前、こんなエントリーを書きまして、ただいま全米オープン開催中ですが、これが終わった後、1月の全豪オープンまで、僕的にはWOWOWを契約している意味が無いので解約手続きをしようとしました。

月末最終日の23:55分より前なら、月内のいつ解約しても翌月解約となるので、解約を決めているなら、忘れないうちに解約した方が良いのです。

ということで、僕はリマインダーに登録してあります。


ああ、でもまた、コールセンターのお姉さんに色々聞かれるんだろうなぁ。

せめて、

  • WOWOWオンデマンドアプリは、いつになったらAirPlay対応するのか?
  • ATPツアーも放送してくれ
  • オンライン解約に対応してくれ

くらいは、いつも通り言ってやろう

と思いつつ、ひょっとしてオンライン解約出来ないだろうか?と検索してみると、


解約方法|お客さまサポート | WOWOWオンライン

何だぁ、出来てるじゃないですか!

でも、解約にはB-CASカードが必要なので、帰ってからやります(^-^)

【Python入門】Pythonistaでタイマーを作る(1)

こんにちは、なりなりです(^ ^)

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,220

さて、Pythonの基本的な文法がわかったところで、いよいよプログラミングします。

今回はiPhoneのPythonアプリ、Pythonistaでプログラミングです(^-^)


タイトル通り、タイマーを作るのですが、まずは基本的な

  • UIの作り方と使い方
  • 1秒毎にカウントダウンする方法

を勉強します。


最初のプログラムの完成形はこちら。

テキストボックスに数値を入れてSTARTボタンを押すと、0までカウントダウンします。

簡単そうですが、意外と苦戦しました(⌒-⌒; )

実験1

まずはインタラクティブモードで実験です。

要は、ループの中で1秒ウェイトがかかれば良いのですよね。

>>> from time import *
>>> times=10
>>> while times > 0:
...   print(times)
...   times -= 1
...   sleep(1)
...   
9
8
7
6
5
4
3
2
1

これは、timeモジュールの中のsleep関数を使ったものです。sleepの引数は秒です。

1秒毎に変数timesがカウントダウンされる様子が見れるので、これが使えると思いました。

実験2

実験1の方法にUIを組込んでみます。

ここで+ボタンを押して


Script with UIを選び


ファイル名を入れたらCreateを押すと


ソースファイル.pyとUIのデザインファイル.pyuiが生成されます。


こちら、.py


こちら、.pyuiです。

まず、.pyuiで+ボタンを押して


Text FieldウィジェットとButtonウィジェットを配置します。ドラッグして、位置とサイズを適当に調整したら、ウィジェットを選択した状態で右上のiボタンを押してプロパティを編集します。


ここでは、Text FieldのTextとButtonのTitleを編集したら、再びiボタンを押します。


するとこうなって、取り敢えずUIは完成!

あ、いや、もう1つ、ButtonのActionにbutton_tappedを入力します。これは、ボタンを押した時に実行する関数名です。

import ui
import time

def button_tapped(sender):
	textfield = sender.superview['textfield1']
	
	times = int(textfield.text)
	
	while times > 0:
		time.sleep(1)
		times -= 1
		textfield.text = str(times)
		
v = ui.load_view()
v.present('sheet')

.pyのソースコードは、この様に変更します。


ボタンをタップした時に呼ぶ関数button_tappedは引数にsenderを持たせます。

sender.superview['textfield1']によって、sender(Button)の外のスコープにあるtextfield1という名前のウィジェットを返します。

これのTextプロパティにtimes変数をカウントダウンしながら代入するプログラムなのですが、


スタートボタンを押すと表示が固まってしまい。


カウントダウンが終わると、ようやく表示が更新されます。


うーん、これではダメだ。
ウィジェットの表示を定期的に更新するには、他の手段が必要な様です。

といことで、次回に続きます。


【Python入門】Pythonistaでタイマーを作る(2) - なりなり日記

続きはこちら!

9/30から東海道・山陽新幹線のチケットがネットで買ってSuicaで使えるようになる!

こんにちは、なりなりです(^ ^)

正直、やっとかよというサービスですけどね。

http://jr-central.co.jp/ex/#s1http://jr-central.co.jp/ex/#s1

これに伴って、現在、年会費が必要なサービスとして提供されているEX予約は消滅する(スマートEXに統合される)ようです。


スマートフォンでの登録方法 | スマートEXとは | スマートEX

何故かモバイルSuicaに関する言及が無いのですが、こちら、「スマートフォンでの登録方法」の「交通系ICカード情報入力」によると

登録済の交通系ICカードを別の会員が登録することはできません。エクスプレス予約会員で登録しているモバイルSuicaとの重複登録もできません。

と書かれており、モバイルSuicaでも使えそうな雰囲気です。

流石に使えると思いたいですが、登録も9/30からということです。


JR東日本も、とっとと対応よろしく!

【Python入門】オブジェクト・クラス・インスタンス

こんにちは、なりなりです(^ ^)

僕が初めてオブジェクト指向のプログラミング言語に触れたのはC++でしたが、オブジェクトの説明を見ると、「世の中の物は全てオブジェクトであり...」など、何か話が難しそうだし、出てくる言葉に馴染みが無いために逃亡したくなりがちです。

でも、そうすると後々困るし、いうほど難しくないし、クラスは作らないにしても使わないことはあり得ないので、Pythonのオブジェクト(Object)について、簡単にまとめておきます。


5分で絶対に分かるオブジェクト指向:5分で絶対に分かる(1/6 ページ) - ITmedia エンタープライズ
オブジェクトについて、この説明は分かりやすいかも。


Pythonのオブジェクトの作りは下記の様になっており、C++と大差ありません(スマホの場合、横表示にすると見やすい)。

オブジェクト(Object)
|ークラス(Class)  : オブジェクトの宣言
|  |ープロパティ(Property)    クラスのメンバー変数
|  |  |ークラス変数     クラス共通で存在
|  |  |ーインスタンス変数  インスタンスごとに存在
|  |ーコンストラクタ(Constructor) メンバー変数の初期化
|  |ーメソッド(Method)      クラスのメンバー関数
|
|ーインスタンス(Instance) : オブジェクトの例(実体)

クラスはオブジェクトの定義であり、その実体をインスタンスと呼びます。

クラスについては、クラスと聞いて誰もが思い浮かぶ、学校のクラスをイメージすればいいです。

クラスのメンバーには名前、性別、年齢などの特性(Property)と変数が有り、プロパティにはクラスの人数といったクラス全体で共通のクラス変数と個々のメンバーの変数であるインスタンス変数が有ります。

インスタンス変数が不定とならないようにコンストラクタで初期化するのが通例であり、特性を知る手段(Method)が有ります(名簿を見るとか)。


簡単なクラスの宣言例が下記です。

class MyClass:             #クラス名の先頭は大文字が慣習
 """クラスの説明"""
 number = 40              #クラス変数の初期化

 def __init__(self):      #コンストラクタ関数名は決められている
   self.name = ""         #インスタンス変数の初期化
   #self.gender = ""      #追加予定のインスタンス変数
   #self.age = ""         #追加予定のインスタンス変数

 def getName(self):       #インスタンス変数を表示するメソッド
   return self.name

 def setName(self, name): #インスタンス変数を変更するメソッド
   self.name = name

モジュールの冒頭、クラスの冒頭、関数の先頭に三重クォート """...""" で記述したコメントは、ドキュメントストリング と呼ばれ、モジュールオブジェクト、クラスオブジェクト、関数オブジェクトの__doc__アトリビュートで参照できて、例えば

 >>> print(MyClass.__doc__)
 'クラスの説明'

 といった具合。

定義したクラスの使い方としては、

taro = MyClass()           #taroをインスタンスとして生成

taro.setName("Yamada Taro") #taroの名前を"Yamada Taro"に設定
print(taro.getName())       #taroの名前を出力

といった具合。

こうして整理してみると、それ程難しくありませんよね。


今回で、Pythonの文法的なお勉強はお仕舞いにして、プログラミングの過程で知らないことが出てきたら、都度勉強します。

プログラミングは、あまり根を詰めて文法の勉強すると途中で嫌になりますから(英語の勉強に似てる)、ざっくり理解したら、興味の有るプログラムを実際に組んでみるのが一番です。

逆に、仕事上でも、プライベートでも構いませんが、作ってみたいプログラムが思い浮かばない人は、プログラミングを習得するのは難しいです。


僕の場合は、取り敢えず

  • とっかかりとして、iPhoneの標準タイマーに無い、秒数の指定出来るタイマー
  • iPhone同士のBluetoothトランシーバ(奥さんとのサイクリングで使いたい)
  • 川崎市のテニスコートの空きを調べるプログラム(ホームページがアホで使いにくいから。Java Scriptでもやってみる)
  • 仕事で使うプログラムのとっかかりとして、FIRフィルタ係数計算プログラム
  • FIRフィルタ係数プログラムで使いたい固定小数点クラス
  • 仕事で使い出したマイコン(PSoC)と通信するプログラム(合わせてPSoCの勉強も)
  • PSoC 4Lの評価ボードとiPhoneでBLE通信するPythonistaプログラム

などを作る予定です。

久しぶりにプログラムに触れて、ちょっと楽しくなってます。ソフトはハードより敷居が低いのが良いです(^-^)