Передача методов в методы Python

#python

Вопрос:

У меня есть класс на python. Чего я пытаюсь достичь, так это передать один метод в другой. Допустим, у меня есть метод, который сканирует каталоги на странице, и другой метод, который открывает список слов, для которого он отформатирует все слова для передачи в метод, который сканирует каталоги.

Моя проблема в том, что метод, который форматирует слова, удаляя их, не передается в метод, который сканирует каталоги.

 class exampleClass:

    def __init__(self):
        pass

    def openWordlist(self):
        try:
            with open(wordlist, 'r') as file:
                for word in file:
                    word = word.strip()
        except FileNotFoundError:
            print('File does not exist')

    def scanDomain(self):
        try:
            domain = 'http://'   targetURL   '/'   word
            r = requests.get(domain)
                if r.status_code == 200:
                    print(f'[ ] {domain}')
                else:
                    if isVerbose:
                        print(f'[~] {domain}')
                    if r.status_code == 200:
                        print(f'[ ] {domain}')
        except requests.exceptions.ConnectionError:
            print('[!] CONNECTION ERROR! Exiting...')
            sys.exit(0)

if __name__ == '__main__':
    obj = exampleClass()
    obj.openWordlist()
    obj.scanDomain()
 

Моя цель состоит в том, чтобы передать метод openWordlist() методу scanDomain (), чтобы он мог прочитать этот список слов и проанализировать каждый запрос.

Комментарии:

1. Почему вы упомянули argparse?

2. Извини за это. Я, должно быть, не прояснил свой первоначальный вопрос, который я понял.

3. итак, вы хотите вызвать openWordList() функцию изнутри scanDomain() функции?

4. Да, мне нужна функциональность openWordlist() внутри scanDomain()

Ответ №1:

Чтобы вызвать метод внутри другого метода, вы можете вызвать его с помощью self аргумента (который представляет ваш класс внутри его методов).

 class MyClass:

    def __init__(self):
        pass


    def foo(self):
        return True


    def bar(self):
        res = self.foo()
        return res
 

Ответ №2:

Из вашего примера не ясно, как openWordlist и scanDomain как предполагается взаимодействовать. Я делаю вывод из общей переменной word , что она должна быть разделена между двумя методами. Хороший способ сделать это-создать word атрибут экземпляра класса.

 class exampleClass:

    def __init__(self):
        self.words = None
        self.targetURL = ""

    def openWordlist(self, wordlist):
        try:
            with open(wordlist, 'r') as file:
                self.words = [word.strip() for word in file]
        except FileNotFoundError:
            print('File does not exist')
    
    def scanDomain(self):
        for word in self.words:
            domain = 'http://'   self.targetURL   '/'   word
            try:
                r = requests.get(domain)
            except requests.exceptions.ConnectionError:
                print('[!] CONNECTION ERROR! Exiting...')
                continue
            if r.status_code == 200:
                print(f'[ ] {domain}')
            else:
                if isVerbose:
                    print(f'[~] {domain}')
 

Ответ №3:

Я не уверен, что это то, что вы хотите, но вы можете просто добавить аргумент в функцию, которая должна получить другую функцию, а затем выполнить функцию, которая была передана следующим образом:

 class exampleClass():

    def openWordList(self):
        print("Do something else")

    def scanDomain(self, a_function):
        print("Do something")
        a_function()

if __name__ == "__main__":
    obj = exampleClass()
    obj.scanDomain(obj.openWordList)