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:
→ Ссылка