请原谅noob问题。我不明白这个" self"与此有关的东西:
from selenium.common.exceptions import NoSuchElementException
def is_element_present(self, how, what):
try:
self.driver.find_element(by=how, value=what)
except NoSuchElementException:
return False
return True
#### navigate to the web page with a bunch of code here, then continue
text_present = self.assertTrue(self.is_element_present(By.LINK_TEXT, "Click Here"))
当我运行这个时,我得到的错误是:
test_link = self.assertTrue(self.is_element_present(By.LINK_TEXT, "Click Here"))
NameError: name 'self' is not defined
我理解"自我"常规使用它作为函数中的第一个参数,但我不理解错误。我如何定义自我?
编辑1:我已经纠正了" self"按惯例使用(见下面的评论/答案)。但是,我仍然不知道我应该做些什么来满足Python解释器。
答案 0 :(得分:0)
self
"常规用作第一个参数"在方法中,它与一个类相关联。此上下文中的self
表示调用该方法的类的实例。但是,函数不与类关联,因此不需要初始self
参数。这是函数和方法之间的根本区别之一 - 方法与类相关联,并被称为instanceOfClass.methodName(args)
,其中函数只存在于命名空间中,并被称为functionName(args)
。另请注意,当调用方法时,self
不会传递给调用:它仅在定义方法时使用。
答案 1 :(得分:0)
您可能知道C ++中的this
指针。在原则上,Python的self
非常相似(但更多的是引用而不是指针)。它是您应用函数的当前对象。
class MyClass:
def my_method(self, arg):
pass
my_object = MyClass()
my_object.my__method("whatever")
实际上就像(不完全相同):
def my_func(the_object, arg):
pass
class MyClass:
pass
my_object = MyClass()
my_func(my_object, "whatever")
由于实际上涉及的更多,反过来的方法不起作用:
my_object.my_func("whatever")
会引发异常(错误),试试吧。这是因为my_func
是未绑定函数(与任何对象/类无关)。 my_method
实际上是bound
(到my_object
)。
虽然{C}中的方法隐式传递this
(您不必将其指定为参数),但Python要求将其明确列为第一个参数。名称self
实际上只是约定,方法总是将其对象作为第一个参数,因此它也可以命名为" thats_me"。但是,坚持使用'self',因为许多工具都依赖于此(语法高亮显示编辑器,调试器......)。
在方法本身中,然后self.my_member
或self
显式访问该对象的所有成员.my_func(). While in C++ one would write
my_member or
this-> my_member`等等。后者基本上类似于Python的方式。
请阅读更多here和一般的教程。
背景:将第一个参数传递给对象是由于Pythons的主要指导原则之一:"显式优于隐式"。