AttributeError: 'NoneType' object has no attribute 'getAllUsers'
Пишу телеграмм бота Выдаёт ошибку:
File "C:\Users\AcerPC\PycharmProjects\TelegramBotFromPekarnia\aiogram_run.py", line 19, in start_bot
count_users = await hundler.getAllUsers()
^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'getAllUsers'
Сама функция:
async def start_bot():
await set_commands()
count_users = await hundler.getAllUsers()
try:
for admin_id in admins:
await bot.send_message(admin_id, f'Я запущен?. Сейчас в базе данных <b>{count_users}</b> пользователей.')
except:
pass
Класс в котором лежит функция getAllUsers()
class Handler(object):
instance = None
def __new__(cls, *args, **kwargs):
if not hasattr(cls, 'instance'):
cls.instance = super(Handler, cls).__new__(cls, *args, **kwargs)
return cls.instance
def __init__(self, *args, **kwargs):
dotenv.load_dotenv()
self.engine = create_engine(os.getenv('DATABASE_URL'))
self.db = sessionmaker(
autocommit=False,
autoflush=False,
bind=create_engine(
os.getenv("DATABASE_URL")
))()
def createUser(self, fullName: str, prof: str):
self.db.add(User(full_name=fullName, profession=prof))
self.db.commit()
def getUsersByProf(self, prof: str):
return self.db.query(User).filter(User.userProf == prof).all()
def getAllUsers(self):
return self.db.query(User).all()
def getUserById(self, id: int):
return self.db.query(User).filter(User.userId == id)
Переменная в которой присвоил класс Handler hundler=Handler()
Пробовал без переменной, но ничего принципиально не изменилось
Ответы (1 шт):
Автор решения: Xander
→ Ссылка
У вас метод __new__
отрабатывает не так, как вы ожидали.
Дело в том, что строка if not hasattr(cls, 'instance'):
проверяет - есть ли аттрибут instance
. А он у вас есть, просто равен None
. Поэтому код внутри этого if никогда не выполняется.
Просто замените
if not hasattr(cls, 'instance'):
на
if not cls.instance: