首页 > 解决方案 > 如何从类中声明的dict调用类方法?

问题描述

我正在尝试在一个类中创建一个字典,其中键作为提示命令,类方法作为值,但是在尝试运行模块时我遇到了以下问题

cmd = {'-v': self.view_leagues(), NameError: name 'self' is not defined

我不明白为什么我不能这样做?

下面的示例代码:

class CLIStats:

    cmd = {'-v': self.view_leagues(),
           'exit': 'sys.exit()',
           'Back To Home': '-b',
           'View Stats Type': '-s',
           'Help' : '-h' }

    def __init__(self):
        self.leagues = {'EN_PR': ['2019/2020', '2018/2019']}

    def view_leagues(self):
        for league in self.leagues.keys():
            print("{: <10}".format(league), end="")
        print('\n')


def main():
    interface = CLIStats()
    print(interface.cmd.keys())


if __name__ == '__main__':
    main()

标签: pythonoop

解决方案


你只需要在里面声明变量__init__()。尝试这个:

class CLIStats:
    def __init__(self):
        self.leagues = {'EN_PR': ['2019/2020', '2018/2019']}
        self.cmd = {'-v': self.view_leagues(),
               'exit': 'sys.exit()',
               'Back To Home': '-b',
               'View Stats Type': '-s',
               'Help' : '-h' }

    def view_leagues(self):
        for league in self.leagues.keys():
            print("{: <10}".format(league), end="")
        print('\n')


def main():
    interface = CLIStats()
    print(interface.cmd.keys())


if __name__ == '__main__':
    main()

如果要创建cmd广告独立变量,请使用以下代码:

class CLIStats:
    def __init__(self):
        self.leagues = {'EN_PR': ['2019/2020', '2018/2019']}

    def view_leagues(self):
        for league in self.leagues.keys():
            print("{: <10}".format(league), end="")
        print('\n')


def main():
    interface = CLIStats()
    cmd = {'-v': interface.view_leagues(),
           'exit': 'sys.exit()',
           'Back To Home': '-b',
           'View Stats Type': '-s',
           'Help' : '-h' }
    print(cmd.keys())


if __name__ == '__main__':
    main()

推荐阅读