2012-03-06 6 views
0

私はオブジェクト指向プログラミングの新機能を持っているので、抽象概念の中には少しぼやけているものがあります。私は古いゲーム言語のための通訳を書いています。これにより、上記の言語からカスタム型を実装し、必要に応じてスタック上に配置して操作する必要がありました。リストにカスタムクラスオブジェクトを配置する

ここで、リストに文字列を配置できます。私はリストに数字を置くことができ、私はリストにシンボルを置くことさえできることを発見しました。しかし、私はちょうど変数にドロップすることができないときに、リストにカスタムオブジェクトのインスタンスを置く方法について少しばかげている(結局のところ、どれくらいの数のオブジェクトが存在するかわからないからコードが実行されている間に手作業でそれらを定義してください:)

私は、最も簡単なデータ型の1つ、つまりDBREFを作成しました。 DBREFには、データベース参照番号が含まれています。実装しなければならない型チェックメカニズムが実装されていて、それは問題を混乱させるので、整数、文字列、辞書などを使うことはできません。ここで

は私のコードとその背後にある私の推論です:

class dbref: 
     dbnumber=0 
     def __init__(self, number): 
      global number 
      dbnumber=number 
     def getdbref: 
      global number 
      return number 

私はdbrefという名前のクラスを作成します。それは(今のところ)数値をとり、それを変数に格納するだけです。

examplelist=[ dbref(5) ] 

dbrefオブジェクトがスタックにあることを私は願っています。それは可能ですか?

if typeof(examplelist[0]) is dbref: 
     print "It's a DBREF." 
    else: 
     print "Nope." 

...または私はPythonのクラスがどのように動作するかを誤解しています:さらに、私はやることができるのだろうか?また、私のクラス定義はどんな方法でもうねっていますか?あなたが使用している場合

+0

Pythonでは、オブジェクトのライフタイムが自動的に管理されるため、オブジェクトの格納先(すべてのオブジェクトがヒープに格納されます)を心配する必要はありません。 'typeof'に相当するのは' isinstance'です:if isinstance(examplelist [0]、dbref) 'しかし、あなたはむしろダックタイピングを利用しないでください。 'dbref')。 –

+0

は質問には関係しませんが、ほとんどの場合、Pythonで 'グローバル'を避けたいと思っています。いつも質問してください。=) –

答えて

1

... dbnumberクラス属性、というよりインスタンスになるので、クラスのすべてのインスタンス間で同じ番号を共有する

class dbref: 
    dbnumber=0 

属性。代わりにこれを試してみてください:

class dbref(object): 

    def __init__(self, number): 
     self.dbnumber = number 

    def getdbref(self): 
     return self.dbnumber 

selfは、インスタンスのメソッドのいずれかを呼び出したときに自動的にPythonが渡されたオブジェクトインスタンス自体への参照です。

+0

ああ、ありがとう!そして私は望んでいたようにリストにdbrefオブジェクトを配置することができますか? – Kelketek

+0

もちろん。あなたはリストに何かを置くことができます。クラスを呼び出すことによってインスタンスを作成するだけです: 'my_dbrefs = []; my_dbrefs.append(dbref(13)) 'または何を持っています。 – Amber

関連する問題