#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)