#c# #python #function #class
#c# #python #функция #класс
Вопрос:
В настоящее время я создаю свой собственный интерпретатор для пользовательского языка с использованием 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, а также self
в круглых скобках в функции Python. Я также не знаю, куда поместить __init__
функцию в C #.
Может ли кто-нибудь научить меня, что означает код Python?
Ответ №1:
Да, это глобальные переменные. Ваш подход просто великолепен.
‘Object’ в круглых скобках является наследством от класса ‘object’. Насколько вам важно в этом случае, вы можете игнорировать это.
Self в круглых скобках — это просто синтаксис python, self эквивалентен «this» в C #, и вы должны указать его в подписи метода. Опять же, вы можете игнорировать это.
init — это просто конструктор класса.
Комментарии:
1. Итак, если
init
это конструктор по умолчанию, это означает в C #, что именно туда я помещаю свой get / set для полейtype
иvalue
? Похоже, что Python не указывает, какой тип данных будет возвращен, потому что позже в коде в руководстве будет код типаreturn Token(EOF, None)
, который, как я предполагаю, возвращает экземпляр Token . В Python этот код является методом или конструктором?2. Неважно, у меня все работает. Если бы я не знал, что
object
иself
следует игнорировать, я бы не выполнил преобразование Python в C # успешно. Спасибо!3. Отлично, удачи! Python действительно является языком динамической типизации, поэтому вы можете задавать / возвращать любой тип.