簡體   English   中英

class 的“Python NameError:未定義名稱”

[英]“Python NameError: name is not defined” for class

我很難在我的 Python 代碼中完全定義 class。 我玩過它,但沒有運氣。

from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, \
    ConversationHandler, MessageHandler, BaseFilter, run_async, Filters
     

class TelegramBot:
    class PrivateUserFilter(BaseFilter):
        def __init__(self, user_id):
            self.user_id = int(user_id)

        def filter(self, message):
            return message.from_user.id == self.user_id

    def __init__(self, token: str, allowed_user_id): 
        self.updater = Updater(token=token)
        self.dispatcher = self.updater.dispatcher
        self.private_filter = PrivateUserFilter(allowed_user_id)
        self._prepare()

它拋出以下異常:

~\OneDrive - yyy\..\core\telegrambot.py in __init__(self, token, allowed_user_id)
---> 44         self.private_filter = PrivateUserFilter(allowed_user_id)
     45         self._prepare()
     46 

NameError: name 'PrivateUserFilter' is not defined

您將 class 放入另一個 class 中。 這意味着“內部” class 只能作為第一個屬性使用。

雖然有些系統使用了這樣的嵌套類,例如 Django 以使用嵌套類來處理模型的某些類型的元信息和 forms,但在這里它似乎完全沒用。

只需將PrivateUserFilter移至頂層,在另一個 class 旁邊。

self.private_filter = PrivateUserFilter(allowed_user_id)更改為self.private_filter = self.PrivateUserFilter(allowed_user_id)

編輯:也可以使用TelegramBot而不是self

把它想象成命名空間,如果你引用外部 class,你將只能調用內部 class。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM