Python AttributeError:“ PostSaveCommand”对象没有属性“ _server”

时间:2019-04-27 17:48:06

标签: python

我正在构建一个python插件,执行此操作的代码如下所示:

class BaseCommand(sublime_plugin.TextCommand):
    @property
    def server(self):
        if self._server == None:
            self._server = "My Server"
    return self._server

class PostSaveCommand(BaseCommand):
    def run(self, edit):
        super().server.new_post("Title", "", "Text")

尝试构建代码时,总是出现以下错误:

>>> view.run_command('post_save')
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/sublime_plugin.py", line 1088, in run_
    return self.run(edit)
  File "/Users/joywek/Library/Application Support/Sublime Text 3/Packages/BlogPress/BlogPress.py", line 53, in run
    super().server.new_post("Title", "", "Text")
  File "/Users/joywek/Library/Application Support/Sublime Text 3/Packages/BlogPress/BlogPress.py", line 42, in server
    if self._server == None:
AttributeError: 'PostSaveCommand' object has no attribute '_server'

2 个答案:

答案 0 :(得分:1)

我们尚未定义sublime_plugin.TextCommand的属性是什么,但是假设_server是您要定义为BaseCommand类的一部分的属性,则需要实例化该属性位于__init__类下的BaseCommand方法中。

例如:

class BaseCommand(sublime_plugin.TextCommand):
    def __init__(self):
        super().__init__()
        self._server = None

    @property
    def server(self):
        if self._server == None:
            self._server = "My Server"
    return self._server

class PostSaveCommand(BaseCommand):
    def run(self, edit):
    super().server.new_post("Title", "", "Text")

话虽如此,您可以摆脱已经定义的server()方法,并根据需要将_server实例化为“我的服务器”,例如下面的示例。< / p>

class BaseCommand(sublime_plugin.TextCommand):
    def __init__(self):
        super().__init__()
        self._server = "My Server"

class PostSaveCommand(BaseCommand):
    def __init__(self):
        super().__init__()

    def run(self, edit):
        self._server.new_post("Title", "", "Text")

答案 1 :(得分:1)

问题是访问BaseCommand属性时_server没有设置server属性。您正在尝试检查其None

    if self._server == None:
        self._server = "My Server"

但是,_server属性不存在,并且此检查引发AttributeError。您可以改为检查:

    if not hasattr(self, '_server') or self._server == None:
        self._server = 'My Server'

这将涵盖以下两种情况:当属性不存在以及_server的值等于None时。