Python / pylint E1101需要有关正确对象定义的帮助

时间:2012-05-14 12:01:51

标签: python oop pylint

需要一些帮助来理解我做错了什么。可能非常基本,但我没有把我的大脑包裹起来。

我的代码是:

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定义为本身对我来说就像是胡说八道。

1 个答案:

答案 0 :(得分:4)

如果您的API不需要客户端代码将这些属性的值提供给{{},那么推荐的python方法是将self.Portalself.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将帮助您,您可以自定义它用于匹配您使用的命名约定的正则表达式。