C#中的Python类(对象)和函数(self)

时间:2016-10-23 11:43:35

标签: c# python function class

我目前正在使用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。我也不知道将__init__函数放在C#中的哪个位置。

有人可以教我Python代码的含义吗?

1 个答案:

答案 0 :(得分:0)

是的,这些都是全球性的变种。你的方法很好。
括号中的“对象”是类“对象”的继承。在这种情况下,你可以忽略它 括号中的self只是python语法,self在C#中等同于'this',你必须在方法的签名中指定它。同样,你可以忽略它 init 只是该类的构造函数。