今天在练习敲代码的时候遇到一个问题就是关于self!!!
教材中定义方法时没有加self,而我自己按照平时的套路敲的时候仍然敲了self,后面再照着教材中去调用该方法时报错,如下:
LoginPage().test_user_login(driver,username,password)
TypeError: init() missing 1 required positional argument: ‘driver’
提示丢失了一个初始化的参数。
部分代码如下:
class BasePage:
def __init__(self,driver):
self.driver=driver
class LoginPage(BasePage):
...
#按照教材上定义这个方法时时没有加self的:
#def test_user_login(driver,username,password):
#自己惯性操作,写成了这样:
def test_user_login(self,driver,username,password):
login_page=LoginPage(driver)
login_page.open()
login_page.type_username(username)
login_page.type_password(password)
login_page.type_submit()
#调用方法的代码
LoginPage().test_user_login(driver,username,password)
提示报错后,找了一些网上的资料,也请教了一些高人,最后得知如果要self的话,还有一种办法可以,就是在调用类的方法的时候初始化一个对象,如:
LoginPage(driver).test_user_login(driver,username,password)
在调用LoginPage的时候实例化一个对象driver即可。
虽然现在还不能完全吃透这个解释,大家可以参考博友的
我就先记住了:
定义方法的时候加了self,那么在调用这个类中的方法时就必需要实例化一个对象,即:类(对象).方法(参数)
定义方法的时候没有加self,那么调用这个类的方法时就可以直接调用方法,即:类.方法(参数)
大家有什么好的理解可以相互学习!
与君共勉!
------------------------------------------我是分割线-------------------------------------------------------
之前写的self有无的内容主要是针对实例化对象的时候调用方法的问题(或写法)。
回过头来复习的时候,又被方法有无self的属性饶晕了头,于是,再简单说明一下。
class AA():
def go(self):
self.one='hello'
print(self.one)
def go1(self):
two = 'hello0'
print(two)
a1=AA()
a1.go()
a1.one
a2=AA()
a2.go1()
a2.two #a2.two后面的.two是手打上去的,编辑器没有智能提示
运行结果:
显然打印two是失败的。
上面说了.two是手打上去的,编辑器没有智能提示,是因为two不是go1()方法的全局属性,出了方法外面,two就不能被使用,简单说就是two是一个局部变量。
而one是定义为self.one,相当于one是go()方法的一个自带属性,在方法之外也可以使用,属于全局变量。
因此想要打印two,直接调用go1()即可。当然one也是可以这样的。
a2=AA()
a2.go1()
共勉~