0

我正在为 Python 使用 lsp。我想知道一个对象的功能,如果没有定义,可以使用or jedilsp给出错误/警告或下划线吗?我知道这很有挑战性,我只是想知道这是否可能。flycheck

示例python代码:

class World():
    def hello():
        print("hello")


obj = World()
obj.hello()()
obj.foo()   # <=== hoping to see: No definitions found for: foo and underline foo()
~~~~~~~~~

因为foo()不是World;下的对象 我想lsp给我一条警告消息,让我知道该函数在对象定义下不存在。


示例配置可以在这里看到:https ://github.com/rksm/emacs-rust-config

注释掉这些行9..3548添加以下(use-package python :ensure nil)保存和安装包。然后打开一个python文件,Mx lsp启动lsp,

4

1 回答 1

0

这是一个以编程方式检查给定对象是否具有任意名称的方法的函数:

def method_exists(obj_instance, method_name_as_string):
    try:
        eval("obj_instance." + method_name_as_string + "()")
    except AttributeError:
        print("object does not have the method " + method_name_as_string + "!")
        return False
    else:
        print("object does not has the method " + method_name_as_string + "!")
        return True

method_exists(obj, "foo") #returns False
method_exists(obj, "hello") #returns True

它返回一个布尔值,而不是出错并中断程序的执行。从那里,您可以发出飞行检查警告或根据信息执行几乎任何您想做的事情。它只检查实例方法,但可以很容易地适应检查与对象无关的类方法或函数。

于 2021-04-17T06:24:45.207 回答