python - 如何从类中声明的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()
解决方案
你只需要在里面声明变量__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()
推荐阅读
- java - 链接列表的部分遍历是否算作列表的“一次通过”?
- jquery - 在 laravel foreach 中显示更多或更少的图像
- c++ - 在 C++ 中移动语义
- rest - 插入执行分页的记录失败
- c# - LINQ:获取包含具有特定名称和值的属性的数组中的对象
- reactjs - useEffect 依赖导致无限循环
- python - Geojson另存为GPX文件
- python - 有没有办法从字典中的值中的键打印
- kubernetes - Minikube 上的 MariaDB Galera:mkdir:无法创建目录“/bitnami/mariadb/data”:权限被拒绝
- asp.net-mvc-4 - 如何使用 Rotativa 从 ASP.Net MVC 中具有不同动态标题的视图生成单个 PDF?