@glebandopalas

Что не так с моим ООП на Python?

Я уже какое то время занимаюсь написанием бота для Instagram, используя фреймворк Selenium. Недавно, я решил перенести большую часть кода в класс, чтобы все было правильно и православненько, и было уже аккуратно всё рассортировал на функции, а сами функции запихнул в класс. как резко ощутил где то в груди боль.
Вот небольшая вырезка из основного кода, которая наглядно продемонстрирует всю суть проблемы:
from data import login, password #данные аккаунта, которые программа вводит при авторизации
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

class Newbie():

    def __init__(self, login, password):
        self.login = login
        self.password = password
        self.driver = webdriver.Firefox()

    def logging(self, login, password):
        driver = self.driver
        try:
            driver.get("https://www.instagram.com")
            time.sleep(5)

            login_input = driver.find_element_by_name("username")
            login_input.clear()
            login_input.send_keys(login)

            time.sleep(5)

            password_input = driver.find_element_by_name("password")
            password_input.clear()
            password_input.send_keys(password)
            password_input.send_keys(Keys.ENTER)
            time.sleep(5)
        except Exception as ex:
            print(ex)
            self.killdriver() #функция которая закрывает браузер

Newbie.logging(login, password)

TypeError: logging() missing 1 required positional argument: 'password'


Программа отчётливо говорит мне что в функции не хватает одного аргумента при вызове, хотя я указал всё так как и планировал, и до этого всё прекрасно работало. Объясните пожалуйста в чём тут ошибка, потому что активное гугление на протяжении двух последних дней не дало никакого результата, кроме головной боли и суицидальных мыслей.
  • Вопрос задан
  • 144 просмотра
Решения вопроса 2
deepblack
@deepblack Куратор тега Python
user = Newbie(login, password)
Какое-то неправильное ООП.

Метод logging наверно нужно переименовать, например на auth_user
И использовать в нём переменные экземпляра класса т.е. self.passwordи self.login
Ответ написан
Комментировать
XXXXPro
@XXXXPro
Fullstack Web developer
Поскольку метод не объявлен как статический, то нужно создать конкретный экземпляр класса и вызывать уже для него. То есть
newb = Newbie(login,password)
newb.logging(login,password)

Ну или ещё вариант — Newbie.logging(newb,login,password)
Кстати, если логин и пароль запомнили в self, то зачем передавать их в logging в параметрах ещё раз? Лучше используйте self.login и self.password.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы