Python robotframework:定义类中可用的关键字

Python robotframework:定义类中可用的关键字,python,robotframework,Python,Robotframework,我有一个在模块中作为类实现的库: MyLib.py class MyLib(ParentLib): def __init__(self): #do stuff pass def keyword(self, arg1): robot.api.logger.console('keyword') class ParentLib: def __init__(self): pass def parent_keyword(self, arg):

我有一个在模块中作为类实现的库:

MyLib.py

class MyLib(ParentLib):
  def __init__(self):
    #do stuff
    pass

  def keyword(self, arg1):
    robot.api.logger.console('keyword')
class ParentLib:
  def __init__(self):
    pass

  def parent_keyword(self, arg):
    robot.api.logger.console('parent keyword')
ParentLib.py

class MyLib(ParentLib):
  def __init__(self):
    #do stuff
    pass

  def keyword(self, arg1):
    robot.api.logger.console('keyword')
class ParentLib:
  def __init__(self):
    pass

  def parent_keyword(self, arg):
    robot.api.logger.console('parent keyword')

我可以导入此库,而无需使用
库MyLib
。这似乎有悖常理,但我想阻止MyLib提供
父关键字
。i、 e.如果用户想要
Parent关键字
,我希望强制他们使用
Library ParentLib
手动导入。这是可能的,还是我需要重新组织我的库的实现方式?

您可以定义方法
get\u keyword\u names
来明确定义哪些关键字将暴露在测试中:

class MyLib(ParentLib):
    ...
    def get_keyword_names(self):
        return ["keyword"]
《robot框架用户指南》将其称为

我个人反对这一点。正如你在问题中所说,这是违反直觉的


如果您想让关键字库共享一些公共代码,可以说最好让
MyLib
ParentLib
从公共基继承,而不是在隐藏继承的函数时让一个从另一个继承。如果要隐藏函数,为什么要从中继承?

parent\u关键字将被任何ParentLib子类继承。如果您想阻止它,请不要在您的subclass@Apero我知道。我想知道robot是否提供了一些方法来定义哪些类方法是关键字,哪些不是关键字,类似于在没有类的情况下定义关键字时使用
\uuuuuu all\uuuuuu
。(我知道,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。parent_关键字是类的一个方法,因此,如果该类是可导入的,那么它的方法就会出现。@Apero OK。我就是这么想的。我只是想知道robot是否有一些增强的功能如果我定义了
get\u keyword\u名称
,而没有
get\u keyword\u文档
get\u keyword\u参数
,以及
run\u keyword
,它还会正常工作吗?回答你的问题,我不知道。不是我写的。我们正在试图弄清楚我们是否可以按原样使用它,或者我们需要花时间重新组织库。@伊渥克:您的问题的答案在用户指南中:使用此API时,Robot框架使用反射来查找实现关键字的方法,与静态API类似。在获得对该方法的引用后,它将从中搜索参数和文档,方法与使用静态API时相同。因此,不需要像使用动态API那样使用特殊方法来获取参数和文档。"