Классы Python (object) и функции (self) в C#

#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 действительно является языком динамической типизации, поэтому вы можете задавать / возвращать любой тип.