c#中的Python类(object)和函数(self)

本文关键字:函数 self 中的 object Python | 更新日期: 2023-09-27 18:14:21

我目前正在使用c#构建自己的自定义语言解释器。我目前正在遵循这个指南(https://ruslanspivak.com/lsbasi-part1/),我认为这会帮助我做一个简单的翻译。然而,指南中有Python的代码,而我对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__()

我假设INTEGERPLUSEOF是全局常数。但是在我的代码中,我不能创建类似的东西,所以我只是在我需要它的函数中创建常量,比如const string INTEGER = "INTEGER"。这是正确的吗?

第二个问题:我不明白Python中的类和函数是如何工作的。从上面的代码中,我用c#创建了这个:

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

我不明白括号中的object在Python类中意味着什么,也不明白Python函数中括号中的self。我也不知道在c#中把__init__函数放在哪里。

谁能教我Python代码是什么意思?

c#中的Python类(object)和函数(self)

是的,这些是全局变量。你的方法很好。
括号中的'object'是从'object'类继承来的。在这种情况下,您可以忽略它。
括号中的self只是python语法,self在c#中相当于'this',你必须在方法的签名中指定它。同样,您可以忽略它。
init是类的构造函数。