Для вызова кода Python, реализованного в виде класса - PullRequest
0 голосов
/ 09 июня 2019

Я новичок в python, только что установил vs код на моем Ubuntu 18.04 и запустил некоторый простой код на python, такой как

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 20, 100)  # Create a list of evenly-spaced numbers over the range
plt.plot(x, np.sin(x))       # Plot the sine of each x point
plt.show()                   # Display the plot

, но как я могу вызвать фрагмент кода python, определяющий класс?

Здесь я получил решение проблемы «самой длинной палиндромной подстроки», реализованной в виде класса, но без какой-либо точки входа, аналогичной функции C ++ main().Как мне назвать этот код "самой длинной палиндромной подстрокой"?

class LPS:
    """
    @param s: input string
    @return: the longest palindromic substring
    """
    def longestPalindrome(self, s):
        if not s:
            return ""

        n = len(s)
        is_palindrome = [[False] * n for _ in range(n)]

        for i in range(n):
            is_palindrome[i][i] = True
        for i in range(1, n):
            is_palindrome[i][i - 1] = True

        longest, start, end = 1, 0, 0
        for length in range(1, n):
            for i in range(n - length):
                j = i + length
                is_palindrome[i][j] = s[i] == s[j] and is_palindrome[i + 1][j - 1]
                if is_palindrome[i][j] and length + 1 > longest:
                    longest = length + 1
                    start, end = i, j

        return s[start:end + 1]

Ответы [ 4 ]

4 голосов
/ 09 июня 2019

Вне класса (и после него!) Звоните

LPS().longestPalindrome("someString")

Обратите внимание на круглые скобки после LPS и до .longestPalindrome. Таким образом, вы создаете объект класса LPS, позволяющий вызывать его «нестатические» методы (смотрите, что longestPalindrome имеет self в качестве параметра).

Другим способом было бы назвать его

lps = LPS()
lps.longestPalindrome("someString")

В качестве альтернативы, пропустите параметр self, который в вашем случае является полностью избыточным, и вызовите

LPS.longestPalindrome("someString")

Примечание: self похоже на this в Java.

Редактировать: В некоторых ответах пропускаются () после LPS, например LPS.longestPalindrome(“someString”). Это крайне негигиеничный Python, точно так же, как ”” для символьных литералов и ’ ’ для строк, хотя оба они верны.

2 голосов
/ 09 июня 2019

Вы можете просто импортировать ваш класс по имени и использовать метод класса в другом скрипте Python или таком же скрипте, как этот

import LPS 
LPS.longestPalindrome(0, "Your String")
2 голосов
/ 09 июня 2019

Обычно в Java или C мы создаем объект класса и обращаемся к любому методу этого класса через объект.

Но в Python вы можете просто использовать имя класса, за которым следует оператор точки и, наконец,метод, к которому вы хотите получить доступ, например

LPS.longestPalindrome (s)

в вашем случае

1 голос
/ 09 июня 2019

Вы можете сделать это, добавив следующие строки кода:

if __name__ == "__main__":
    # Creates object of your class
    lp = LPS()   
    # Calls the longesetPalindrome() with "prateek" as argument
    response=lp.longestPalindrome("prateek")
    # Prints the response which the function returns.
    print(response)

Так как вы новичок в python, и если вы ищете что-то похожее на 'main ()' из c ++ в python, вы можете использовать

если __name__ == "__main __":

работает почти так же, как main (), но это не функция. По сути, каждый модуль Python имеет свое имя , определенное, и если это * main ’, это означает, что модуль запускается пользователем автономно, и мы можем сделать соответствующие соответствующие действия. if __name__ == «main»: используется для выполнения некоторого кода, только если файл был запущен напрямую, а не импортирован.

...