Я понимаю как создать класс, создать методы. инициализировать класс ...
Но я не понимаю как правильно писать в стиле ООП. Большинство статей, которые я нашел, заканчиваются вызовом метода класса. Я написал авторизацию, скажите правильно ли я пишу в стиле ООП
Файл 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
}
Пишите любые замечания!