01
November 2005

python 脱チュートリアル2?

もう少しでチュートリアルは卒業か。。

本日は、娘の幼稚園の入園願書受付ため徹夜で並ぶ。
バッテリーがあと2時間しかないが、その間に、
python の勉強をすることとした。

今日の課題は、クラス。現在、インターネットにつなげないの
で、ほかの python プログラムを見てまねっこ中です。

ということで、以前から気になっていた、クラスの使い方に
初チャレンジです。

(1) ただのクラスの作成

    インスタンスの作り方に迷いながらなんとかクリア。

TEST_DEF  = 10
TEST_DEF2 = 20

class TestClass:

    def __init__(self):
        self.__private_member = "TestClass"
        self.public_member = self.__private_member

    def Print(self, strName):
        print self.__private_member + strName

    def Print(self):
        print self.__private_member


# Test an accessabilities.
cTestClass = TestClass()

# not accessed.
# print cTestClass.__private_member

# accessed.
print cTestClass.public_member

# The overload test.
cTestClass.Print()
#cTestClass.Print("overloaded")

 

    (a) データメンバの可視性
        チュートリアル中で書いてあったような気がしたのでトライ。
        "__メンバ名" と記述するらしい。

        C++ でいう public と protected といったところか。。
        継承時の可視性はそこでテストすることにしよう

    (b) 関数のオーバーロード
        残念ながら、オーバーロードは実現されていないようだ。

        スクリプトの最後に記述された関数が有効となってようで、
        引数のタイプが違うといっておこられてしまう。

        TypeError: Print() takes exactly 1 argument (2 given)


(2) テンプレートクラスの作成
    C++ のテンプレートのようなクラスを作成してみました。
    最初は、オブジェクトを渡すタイプを試みて見ました。
    こちらは、すんなり動いて、これならつかえるかな。。

(3) 本当のテンプレートクラスの作成
    と、思いつつ、ぜんぜんスマートでわないので、ちょっと
    考えました。
    。。。

    もしかして、クラス名を渡すことができるのでは。。

 

# It like a template class.
#
#   (1) set a object to constructor,
#   (2) set a class name.
#

# template argument sample class 1.
class DataHolderImpl1:
    def __init__(self):
        self._number = 1

    def PrintDataImpl(self, strName):
        print "PrintDataImpl1 " + strName

# template argument sample class 2.
class DataHolderImpl2:
    def __init__(self):
        self._number = 2

    def PrintDataImpl(self, strName):
        print "PrintDataImpl2 " + strName

# template class sample : set a object to constructor
class DataHolder:
    def __init__(self, template_class):
        self._data = {}
        self._template_class = template_class

    def AddData(self, strName, strData):
        self._data[strName] = strData

    def PrintData(self, strName):
        self._template_class.PrintDataImpl(strName)

# template class sample : set a class name to constructor
class TemplateTest:
    def __init__(self, class_info):
        self._class = class_info()

    def PrintData(self, strName):
        self._class.PrintDataImpl(strName)
        self.PrintDataImpl(strName)

# test (1)
cDataHolderImpl1 = DataHolderImpl1()
cDataHolderImpl2 = DataHolderImpl2()

cDataHolder = DataHolder(cDataHolderImpl1)
cDataHolder.AddData("name1", "data1")
cDataHolder.PrintData("name1")

cDataHolder2 = DataHolder(cDataHolderImpl2)
cDataHolder2.AddData("name1", "data1")
cDataHolder2.PrintData("name1")

# test (2)
cTemplateTest = TemplateTest(DataHolderImpl1)
cTemplateTest.PrintData("test")

 

    参考書がないので、とりあえず試してみることにした。
    なんと、すんなり動くではありませんか。。

    多分、基本中の基本のやり方なのかもしれませんが、
    ちょっとうれしい。。

(4) クラスの継承
    本来なら、(2) や (3)より先にこっちだろという突っ込み
    が入りそうだがとりあえず。。できることより、できるかどうか
    を確認してみたいということで。。。

    で、クラスの継承のテストをやってみました。。

 

class SuperClass:

    def __init__(self):
        print "SuperClass"
        self.__class_name = "SuperClass"
        self.class_name = self.__class_name

    def Print(self):
        print "SuperClass::Print(self)"


class OverwriteTest(SuperClass):
    def __init__(self):
        self.__class_name = "OverwriteTest"

    # The overwrite test.
    def Print(self):
        # data member visiblity test.
        print self.__class_name
        print "OverwriteTest::Print(self)"

        # call super class method. set self argument at first.
        SuperClass.Print(self)


cOverwriteTest = OverwriteTest()
cOverwriteTest.Print()

 

    (a) データメンバの可視性
        スーパークラスの非公開メンバは継承したクラスからは
        アクセスできるようだ。

    (b) オーバーライドテスト
        オーバーライドは問題なさそう。
        スーパークラスの呼び出しも、self を渡せば大丈夫なようですね。

        C++ の規定クラスのメソッドより呼び出しよりも直感的な感じ。。


(5) クラスの多重継承

    オブジェクト指向言語では、多重継承が可能な言語が多い。
    複数の同じ規定クラスのクラスを多重に継承したときに、意図されて
    以内動きをする可能性があることから、多重継承はあまり推奨されて
    いないが、そこをあえて、テストして使い勝手をみてみよう。。

 

# sample super class A
class SuperClassA:

    def __init__(self):
        print "SuperClassA"
        self.__class_name = "SuperClassA"
        self.class_name = self.__class_name

    def Print(self):
        print "SuperClassA::Print(self)"

# sample super class B
class SuperClassB:

    def __init__(self):
        print "SuperClassB"
        self.__class_name = "SuperClassB"
        self.class_name = self.__class_name

    def Print(self):
        print "SuperClassB::Print(self)"


class TestClass(SuperClassA, SuperClassB):


    def TestPrint(self):
        SuperClassA.Print(self)
        SuperClassB.Print(self)

    def Print(self):
        print "TestClass::Print(self)"


cTestClass = TestClass()
cTestClass.TestPrint()
cTestClass.Print()

 

    (1) スーパークラスの呼び出し
        スーパークラスを指定するのだから、当然問題なく行えた。

    (2) スーパークラスの同名メソッドを呼び出し
        先に定義したスーパークラスの呼び出しが行われる。

    (3) オーバーライドした場合
        あたりまえだが、ちゃんとオーバーライドしたものが呼ばれる。

    まだ、ダウンキャストや、本当の多重継承での問題に直面していないので
    今の段階では、問題ないと思う。

    多重継承しなければならない場合は、設計段階で問題点を解決してから
    実装すればすむことなので、そんなに気にすることはなさそうだ。

(6) モジュールの作成

    クラスができたので、(別にクラスなくともよいと思うのですが、、)
    モジュールを作成してみたいと思います。


    モジュールといってもただファイル名を Import 節で記述するだけの
    ようです。モジュール内のクラスを使用するためには、

 

Import モジュール名

Import モジュール名 as エリアス名

 

    として、エリアス名でアクセスすることができます。モジュールの
    検索パスですが、一般的な カレントディレクトリを検索して、
    次に path 指定かと思いますが仕様を確認してみる必要があります。

    from は、定数をインポートするときに指定します。

 

from モジュール名 import 定数名, ...

 

    固定値等の import を明示的に行う場合は定数名をカンマで区切って
    羅列すればよいのですが、すべてをインポートするときは、"*" にします。

 

from モジュール名 import *

  

    ヘッダファイル的な使い方ができるので便利そうです。この定数を
    使用するときは "モジュール名.○○" ではなく、定数名をそのまま使用
    できるのですが、C++ のネームスペースの役割を果たす場合は、

    ということで、バッテリーが切れそうなので今日はここまでにしたい
    と思います。

 


Posted by kei at 06:16 | Comments (1065) | Trackbacks (0)
<< COREBlog | Main | python 脱チュートリアル3? >>
Comments
self employed health insurance

self employed health insurance

Posted by: self employed health insurance at February 27,2007 01:34
ben

i say one thing phentermine online 518610 meridia no prescription nresqe

Posted by: ben at August 12,2008 11:07
lola

please look at this order propecia >:-]] cialis free samples 814 generic phentermine =-DD tramadol addiction =PPP addiction vicodin 470624

Posted by: lola at August 26,2008 16:48
lola

cool site man andrea bocelli ringtone =-P cingular free ringtones pqyfw

Posted by: lola at September 01,2008 21:51
kate

hay chris brown ringtones >:[ napster cell phone ringtone 578

Posted by: kate at September 02,2008 04:55
jenna

it's nice site!!! online phendimetrazine :-[[ discount viagra 56515 t-mobile ringtone ctc suncom ringtones mekm buy paxil 597

Posted by: jenna at September 05,2008 05:15
mona

nice work man 10x order cialis %-) generic hydrocodone zpl

Posted by: mona at September 23,2008 16:12
kris

interesting post thx generic soma 611539 cheap paxil 009

Posted by: kris at September 29,2008 16:15
Re: python 脱チュートリアル2?

celeb paparazzi picks
celeb bikini board gallery
series salaries for celebs
celeb at buzz patrol
rpbs celebs
celeb scenes

Posted by: Ksumhf at September 29,2008 18:39
arni

hello everybody! online phendimetrazine 8-O cheapest propecia 8-OO

Posted by: arni at September 29,2008 18:48
Re: python 脱チュートリアル2?

milton twins porn
milton twins lesbian
milton twins in pool
milton twins pics
milton twins porn password
milton twins free

Posted by: Dhtuyqgeu at September 29,2008 20:03
Re: python 脱チュートリアル2?

milton twins trailor
milton twins casting couch teens
milton twins vids
{milton twins gallery facial
ftv girls samples
ftv plug

Posted by: Biulcz at September 29,2008 20:25
joseph

good work man buy phentermine 75455 cheapest soma 8P

Posted by: joseph at September 29,2008 20:39
Re: python 脱チュートリアル2?

ftv girl sandra
ftv symbian
ftv keri spankwire
ftv france
ftv asians sabrine
michelle ftv cheerleader

Posted by: Grnsi at September 29,2008 21:08
kate

please look at this meridia free shipping onjnfd phendimetrazine 270 mg 8)

Posted by: kate at September 29,2008 23:40
Re: python 脱チュートリアル2?

tyra banks in bra
nude photos of tyra banks
tyra banks big butt
tyra banks gay rapper
tyra banks bra youtube
tyra banks photos

Posted by: Mpueomio at September 30,2008 00:05
jenna

good site dude phentermine pills >:-))) buy soma online ujuc

Posted by: jenna at September 30,2008 02:04
Re: python 脱チュートリアル2?

milton twins in
milton twins xxx
milton may twins
twins lick milton simpson
milton twins cumshots
{free milton twins movies

Posted by: Koelpmy at September 30,2008 06:01
Re: python 脱チュートリアル2?

ftv angels video
ftv cheerleader
ftv girl trista
ftv wendy
ftv alisa
ftv gigashare

Posted by: Ujlujkhpy at September 30,2008 06:41
Re: python 脱チュートリアル2?

ftv girl lexy
got milk free video ftv janell
isabella ftv
ftv brunette
ftv cruise
ftv girls traci

Posted by: Mpdfw at September 30,2008 06:59
Re: python 脱チュートリアル2?

charlotte ftv
sammie ftv
milton twins hardcore
milton twins simpson twins
milton twins pornmovies
milton twins xxx

Posted by: Vgvwdvz at September 30,2008 07:18
Re: python 脱チュートリアル2?

milton twins porn clips
milton twins jill
miltons twins
milton twins preview
milton twins jizz
milton twins gallery facial

Posted by: Ptbifekhhu at September 30,2008 07:35
Re: python 脱チュートリアル2?

milton twins solo
free milton twins pics
milton twins strapon
milton twins webstie
celina cross pussy ftv
ftv jane

Posted by: Emwvwzptzp at September 30,2008 08:10
Re: python 脱チュートリアル2?

selena ftv
pictures tara ftv
ftv goldie
melia ftv girl
free ftv girls movie
ftv lasix im

Posted by: Dwuxll at September 30,2008 08:27
Re: python 脱チュートリアル2?

mariah carey naked nude
ftv girl tiffany with cell phone
ftv picture
ftv girl ginger
ftv chantelle
krisyen ftv

Posted by: Fryymkz at September 30,2008 13:39
Re: python 脱チュートリアル2?

vanesa ftv girls
ftv natalia video}
ftv squirt sample movie celine
ftv nylons
milton twins video free
milton twins piss

Posted by: Oncby at September 30,2008 14:13
Re: python 脱チュートリアル2?

he milton twins
milton twins porn clips
milton twins bj
milton twins home
milton twins nude
milton twins and old men pic

Posted by: Tchwype at September 30,2008 14:48
Re: python 脱チュートリアル2?

milton twins gallery facial
milton twins fucking guys
milton twins cunt
ftv girl clara
ftv cute orgasm
ftv penny videos

Posted by: Duytzyhxws at September 30,2008 15:05
Re: python 脱チュートリアル2?

ftv video previews
ftv girl trista
ftv boys
eva ftv
ftv girls password bypas
sister sites to ftv girls

Posted by: Lzsqaa at September 30,2008 15:22
Re: python 脱チュートリアル2?

ftv karlie schoolgirl
tabetha ftv
ftv gina girl movie quality
ftv girls amy
ftv girls codec
ftv thumbs

Posted by: Snwxuk at September 30,2008 15:39
Re: python 脱チュートリアル2?

ftv gilrls
ftv girl briana
ftv savannah
ftv swimsuits
carli banks ftv
ftv girls archive photos

Posted by: Trhomkmt at September 30,2008 15:57
Re: python 脱チュートリアル2?

heidi klum hair
heidi klum s boobs
topless models heidi klum
heidi klum suck
ashanti happy video
ashanti full length sex tape

Posted by: Ylmfn at September 30,2008 18:44
Re: python 脱チュートリアル2?

brooke burke and video and playboy
brooke burke blowjob