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__()
我假设INTEGER
、PLUS
和EOF
是全局常数。但是在我的代码中,我不能创建类似的东西,所以我只是在我需要它的函数中创建常量,比如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__
函数放在哪里。
是的,这些是全局变量。你的方法很好。
括号中的'object'是从'object'类继承来的。在这种情况下,您可以忽略它。
括号中的self只是python语法,self在c#中相当于'this',你必须在方法的签名中指定它。同样,您可以忽略它。
init是类的构造函数。