2016-10-23 7 views
0

現在、C#を使用して独自のインタプリタを作成しています。私は現在、このガイド(https://ruslanspivak.com/lsbasi-part1/)に従っています。私は、私が簡単な通訳をするのに役立つと思います。しかし、このガイドにはPython用のコードがあり、Pythonでは単なることは分かりません。私はINTEGER、​​、およびEOFがグローバル定数であることを前提としていC#のPythonクラス(オブジェクト)と関数(自己)

INTEGER, PLUS, EOF = 'INTEGER', 'PLUS', 'EOF' 
class Token(object): 
def __init__(self, type, value): 
    # token type: INTEGER, PLUS, or EOF 
    self.type = type 
    # token value: 0, 1, 2. 3, 4, 5, 6, 7, 8, 9, '+', or None 
    self.value = value 

def __str__(self): 
    """String representation of the class instance. 

    Examples: 
     Token(INTEGER, 3) 
     Token(PLUS '+') 
    """ 
    return 'Token({type}, {value})'.format(
     type=self.type, 
     value=repr(self.value) 
    ) 

def __repr__(self): 
    return self.__str__() 

私はガイドのこのコードのビットとのトラブルを抱えています。しかし、私のコードでは、私はこれに似た何かを作成することはできませんので、私はちょうどconst string INTEGER = "INTEGER"のような関数で定数を作成します。これは正しいです?

第2の問題:クラスと関数がPythonでどのように機能するかはわかりません。上記のコードから、私はC#で、これを作成しました:

public class Token { 
    public string tokenStr(string type, string value) 
    { 
     return "Token(" + type + "," + value + ")"; 
    } 
} 

私は括弧内のobjectは、Pythonの関数で括弧内selfまた、Pythonのクラスで何を意味するのか理解していません。私はまた、__init__関数をC#でどこに置くべきかわかりません。

誰かが私にPythonコードの意味を教えてもらえますか?

答えて

0

ええ、これらはグローバルバールです。あなたのアプローチは大丈夫です。
カッコ内の 'object'は、 'object'クラスの継承です。あなたがこのケースで気にする限り、あなたはそれを無視することができます。
括弧内のselfはちょうどPythonの構文ですが、selfはC#の 'this'と同じで、メソッドのシグネチャに指定する必要があります。もう一度、あなたはそれを無視することができます。
は、単にクラスのコンストラクタです。

+0

もし 'init'がデフォルトのコンストラクタであれば、それは' set'と 'value'フィールドのget/setを置く場所です。 Pythonはどのデータ型が返されるかを指定していないようです。後で、コードの中に 'return token(EOF、None)'のようなコードがあるので、トークンのインスタンスを返します。 Pythonでは、このコードはメソッドかコンストラクタですか? –

+0

気にする必要はありません。 'object'と' self'を無視する必要があることが分かっていなかったら、PythonをC#変換に成功させることはできませんでした。ありがとう! –

+0

素晴らしい、幸運! Pythonは実際には動的な型定義言語なので、どの型も設定/返すことができます。 – galra