Задать вопрос
@Web__Nikita03

Правильно ли я использую принципы ООП?

Я понимаю как создать класс, создать методы. инициализировать класс ...
Но я не понимаю как правильно писать в стиле ООП. Большинство статей, которые я нашел, заканчиваются вызовом метода класса. Я написал авторизацию, скажите правильно ли я пишу в стиле ООП

Файл csv выглядит login,password.
Функция give_num
def give_num(message=''):
    """Give number"""
    while True:
        try:
            num = int(input(message))
        except Exception:
            print('Надо ввести число!')
            continue
        break
    return num


Файл main
# !usr/bin/env python3
# Virtual Pet.

import signin
import need_func as nf

num_func = 0
welcome_message = (
    f'Добрый день!\n'
    f'Вы играете в игру My Pet\n'
    f'Вам надо ухаживать за вашим домашним питомцем.\n'
    f'Но для начало надо авторизоваться.\n'
    f'Выберете нужное вам действие:\n\n'
    f'1) Авторизоваться\n'
    f'2) Регистрация\n'
    f'3) Выйти\n'
)

while num_func != 3:
    print(welcome_message)
    num_func = nf.give_num('Введите число от 1 до 3: ')
    if num_func == 1:
        """Sign in user."""
        sign_in = signin.SignIn('users.csv')
        logs = sign_in.sign_in()
        if logs['status_code'] == 200:
            LOGIN = logs['login']
        elif logs['status_code'] == 400:
            break
        print(LOGIN)
        nf.contin()
        nf.clear()
    elif num_func == 2:
        pass
    elif num_func == 3:
        break
    else:
        print('У меня нет такой команды, введите число в диапазоне от 1 до 3')


Файл Work (родитель для авторизации и регистрации)
# !usr/bin/env python
# Work with login and Password.

import csv
import need_func as nf


class Work(object):
    """Здесь будет документация"""
    __users = {}
    message_error = (
        '1) Попробовать снова\n'
        '2) Выйти\n'
    )

    def __init__(self, path):
        self.path = path
        with open(path, 'r') as f:
            for i in csv.reader(f):
                self.__users[i[0]] = i[1]

    @staticmethod
    def get_login():
        """В будущем будет документация"""
        return input('Введите ваш логин: ')

    @staticmethod
    def get_password():
        """В будущем будет документация"""
        return nf.give_text('Введите пароль: ')

    @property
    def users(self):
        return self.__users


Сама авторизация
# !usr/bin/env python
# Sign in users

import need_func as nf
from worked import Work


class SignIn(Work):
    """В будущем будет документация"""

    def __init__(self, path):
        super().__init__(path)

    def __check_login(self):
        """В будущем будет документация"""
        while True:
            login = Work.get_login()
            if login in self.users:
                return {
                    'status_code': 200,
                    'login': login
                }
            else:
                print('Такого логина не существует\n' + self.message_error)
                num_func = nf.give_num('Надо ввести число от 1 до 2: ')
                if num_func == 2:
                    return {
                        'status_code': 400,
                        'login': login
                    }
                else:
                    continue

    def __check_password(self, login):
        """В будущем будет документация"""
        while True:
            password = Work.get_password()
            if self.users[login] == password:
                return 200
            else:
                print('Извините, но пароль не подходит\n' + self.message_error)
                num_func = nf.give_num('Надо ввести число от 1 до 2: ')
                if num_func == 2:
                    return 400
                else:
                    continue

    def sign_in(self):
        """В будущем будет документация"""
        logs = self.__check_login()
        if logs['status_code'] != 200:
            return logs
        login = logs['login']
        nf.clear()
        status_password = self.__check_password(login)
        if status_password == 200:
            return {
                'status_code': 200,
                'login': login
            }
        else:
            return {
                'status_code': 400,
                'login': login
            }


Пишите любые замечания!
  • Вопрос задан
  • 470 просмотров
Подписаться 2 Средний 7 комментариев
Решения вопроса 1
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
как правильно писать в стиле ООП

Есть классный сайт с примером, как можно правильно писать в стиле ООП. Другой вопрос, нужно ли? В вашей задаче - не нужно. ООП - это про наличие переиспользуемого кода, расширяемой логики, нескольких реализаций. В книгах обычно в пример приводят оконный менеджер, работающий под несколькими ОС. Вот там да, ООП спасает. А, простите, ввод-вывод в цикле, ООП не требует.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы