【问题标题】:Attribute error: has no attribute 'completeKey' - Python [closed]属性错误:没有属性'completeKey' - Python [关闭]
【发布时间】:2014-04-11 06:44:04
【问题描述】:

运行此代码时出现以下错误:

属性错误:DisplayWelcome 没有属性“completeKey”

import controller.game_play
    import cmd

    class DisplayWelcome(cmd.Cmd):
        """Welcome user to game"""
        def __init__(self):
            self.do_greet()

        prompt = 'ENTER'
        intro = '\n'.join(['        Welcome To   ',
         '...ZOMBIE IN MY POCKET...'])

        def do_greet(self):
            print ('        Welcome To   ')
            print ("...ZOMBIE IN MY POCKET...")

        def do_inform(self, line):
            k = input('Enter a letter')
            print (k)


    def main():
        d = DisplayWelcome()
        #d.do_greet()
        d.cmdloop()
        s = controller.game_play.stuff()

    if __name__ == '__main__':
        main()

【问题讨论】:

  • @njzk2 在一个名为 cmd.py 的系统库中
  • 错误不在您发布的代码中。贴回溯,加上里面提到的代码
  • 这不是题外话,甚至不是太宽泛。它帮助了我。 cmd 是一个默认的python库,它的手册页建议扩展库docs.python.org/3/library/cmd.html
  • 我不认为这是题外话,只是一个需要改进的问题。哈维尔提供的答案实际上让我很头疼。它产生的错误无疑与我的相似: File "/usr/lib/python3.5/cmd.py", line 106, in cmdloop if self.use_rawinput and self.completekey: AttributeError: 'CmdDef' object has no attribute '完成键'

标签: python


【解决方案1】:

这是一个简单的... ;-) 您忘记调用父类 (cmd.Cmd) 的构造函数。 completekey 属性自动声明为默认值。这样就解决了问题!

import controller.game_play
import cmd

class DisplayWelcome(cmd.Cmd):
    """Welcome user to game"""
    def __init__(self):

        #### THIS IS THE LINE YOU FORGOT!!!!
        super(DisplayWelcome, self).__init__()
        # or cmd.Cmd.__init__(self)


        self.do_greet()

    prompt = 'ENTER'
    intro = '\n'.join(['        Welcome To   ',
     '...ZOMBIE IN MY POCKET...', '  Created by Ben Farquhar   '])

    def do_greet(self):
        print ('        Welcome To   ')
        print ("...ZOMBIE IN MY POCKET...")
        print ("  Created by Ben Farquhar   ")

    def do_inform(self, line):
        k = input('Enter a letter')
        print (k)


def main():
    d = DisplayWelcome()
    #d.do_greet()
    d.cmdloop()
    s = controller.game_play.stuff()

if __name__ == '__main__':
    main()

【讨论】:

  • super() 上调用init 比在cmd.Cmd 上调用更好
  • 非常感谢!完全一样的麻烦!
  • 在 Python 2.x 中,cmd.Cmd 是一个老式类,所以 super 不起作用。 (见stackoverflow.com/a/13414241/700113
  • 谢谢,super(ClassName, self).__init__() 为我工作 (3.5)
  • 完美。它对我有用。!
猜你喜欢
  • 2019-03-26
  • 2014-05-14
  • 1970-01-01
  • 2021-08-25
  • 2014-07-08
  • 2019-11-05
  • 2020-05-25
  • 2018-05-02
  • 1970-01-01
相关资源
最近更新 更多