Python中有self和没有self的问题

今天在练习敲代码的时候遇到一个问题就是关于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()

在这里插入图片描述
共勉~

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值