現在、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コードの意味を教えてもらえますか?
もし 'init'がデフォルトのコンストラクタであれば、それは' set'と 'value'フィールドのget/setを置く場所です。 Pythonはどのデータ型が返されるかを指定していないようです。後で、コードの中に 'return token(EOF、None)'のようなコードがあるので、トークンのインスタンスを返します。 Pythonでは、このコードはメソッドかコンストラクタですか? –
気にする必要はありません。 'object'と' self'を無視する必要があることが分かっていなかったら、PythonをC#変換に成功させることはできませんでした。ありがとう! –
素晴らしい、幸運! Pythonは実際には動的な型定義言語なので、どの型も設定/返すことができます。 – galra