【发布时间】:2021-12-18 11:12:12
【问题描述】:
我有一个使用 transition library 的 Python 3.9 类。这个库从本地类设置中创建动态方法,例如:
class experiment:
# The states
states=['solid', 'liquid', 'gas', 'plasma']
# each trigger will create a dynamic method.
transitions = [
{ 'trigger': 'melt', 'source': 'solid', 'dest': 'liquid' },
{ 'trigger': 'evaporate', 'source': 'liquid', 'dest': 'gas' },
{ 'trigger': 'sublimate', 'source': 'solid', 'dest': 'gas' },
{ 'trigger': 'ionize', 'source': 'gas', 'dest': 'plasma' }
]
def __init__(self):
self.machine = LHGMachine(model=self, states=self.states, transitions=self.transitions, initial=self.states[0])
在本例中,将创建动态方法。喜欢:self.melt()、self.evaporate() 和self.transitions 中所述的其他内容。
是否可以将它们记录下来,以便 IDE 提示哪些方法可用?
【问题讨论】:
-
您必须为 PyCharm 实现类型提示才能在自动完成中显示这些方法。我看不到转换库的哪一部分实现了魔术方法(并且您的代码缺少导入,因此它不是 MRE)。但是,我认为转换库不会自动生成一个带有魔术函数签名所需类型提示的存根文件(如果它都是动态的,PyCharm linter 可能会或可能无法解决它以显示自动完成 - 我猜是不会解决这种情况)。如果您只想提示收藏,请参阅this thread。
-
@bad_coder,也许我称它为
magic是错误的,但方法self.melt()是从上述字典中填充的。这是我希望 IDE 自动完成的方法。和evapor() 等一样 -
我在做一个有根据的猜测(超出我之前的评论),如果你想要自动完成工作,你应该使用the Enumerations。是的"magic methods" 是笨蛋。
-
将通过将
magic替换为dynamic来修复标题。 -
您熟悉
__doc__属性吗?
标签: python python-3.x autocomplete pycharm