我有一个库作为模块中的类实现:
MyLib.py
class MyLib(ParentLib):
def __init__(self):
#do stuff
pass
def keyword(self, arg1):
robot.api.logger.console('keyword')
ParentLib.py
class ParentLib:
def __init__(self):
pass
def parent_keyword(self, arg):
robot.api.logger.console('parent keyword')
我可以使用Library MyLib
毫无问题地导入此库。这可能看似违反直觉,但我想阻止MyLib提供Parent Keyword
。即如果用户想要Parent Keyword
,我希望他们被迫用Library ParentLib
手动导入它。这是可能的,还是我需要重新组织我的库的实现方式?
答案 0 :(得分:3)
您可以定义方法get_keyword_names
以明确定义哪些关键字会暴露给测试:
class MyLib(ParentLib):
...
def get_keyword_names(self):
return ["keyword"]
机器人框架用户指南将其称为hybrid library。
就个人而言,我会反对这一点。就像你在问题中所说的那样,这是违反直觉的。
如果你想让关键字库共享一些公共代码,那么让MyLib
和ParentLib
都从公共基础继承而不是让一个继承自另一个,同时隐藏继承的功能。如果你要隐藏这些功能,为什么要从中继承呢?