需要一些帮助来理解我做错了什么。可能非常基本,但我没有把我的大脑包裹起来。
我的代码是:
class baseElement(object):
def __init__(self):
self.Portal = ''
self.locator = ''
def present(self):
return self.Portal.PTF.Presence_of_Element(self.locator)
def visible(self):
return self.Portal.PTF.Is_Element_Visible(self.locator)
class baseActiveElement(baseElement):
def hover(self):
self.Portal.PTF.Mouse_over_element(self.locator)
def click(self):
self.Portal.PTF.Click_on_Element(self.locator)
def get(self):
return self.locator
我在从这些基础实例化对象时定义了Portal,它包含了一些执行指定操作的函数。这有效。没问题。
但是pylint如此抱怨:
E1101: 8,15:baseElement.present: Instance of 'str' has no 'PTF' member
E1101: 11,15:baseElement.visible: Instance of 'str' has no 'PTF' member
E1101: 15,8:baseActiveElement.hover: Instance of 'str' has no 'PTF' member
E1101: 18,8:baseActiveElement.click: Instance of 'str' has no 'PTF' member
我应该怎么做才不会导致此错误?
编辑: 如果我将我的init更改为:
class baseElement(object):
def __init__(self):
self.Portal = object
self.Portal.PTF = self.Portal.PTF
self.locator = ''
pylint异议消失了,我可以看到将门户网站定义为基础对象的价值,因为它最终会成为一个真实的对象,但将Portal.PTF定义为本身对我来说就像是胡说八道。
答案 0 :(得分:4)
如果您的API不需要客户端代码将这些属性的值提供给{{},那么推荐的python方法是将self.Portal
和self.locator
初始化为None
__init__
{1}}方法(在这种情况下,您的类API可能缺少设置这两个属性值的方法)。
Pylint尝试进行类型推断:如果对self.Portal的唯一影响,它可以在你的代码中看到一个字符串,它会推断出属性的类型是str,并用它来检查对自己执行的调用.Portal。
如果你写:
__int__
它会尝试知道它对门户网站和定位器的类型一无所知。
如果您使用相同的模块代码,例如:
class baseElement(object):
def __init__(self, portal, locator):
self.Portal = portal
self.locator = locator
然后Pylint将能够使用它来收集关于门户和定位器的可能类型的一些知识,并且它将能够分析from somewhere import PortalClass, LocatorClass
# [...]
element = SomeClassDerivingFromBaseElement(PortalClass(), LocatorClass())
和PortalClass
的定义,例如{ {1}},可能会查看LocatorClass
的原型。
旁注:我建议尝试在类,属性和方法的命名中实现一些一致性。 Pylint将帮助您,您可以自定义它用于匹配您使用的命名约定的正则表达式。