首页 > 解决方案 > Python AttributeError:“PostSaveCommand”对象没有属性“_server”

问题描述

我正在构建一个 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'

标签: python

解决方案


我们还没有定义属性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根据需要简单地实例化为“我的服务器”,如下例所示。

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")

推荐阅读