社区 > 技术交流 > python关于类的两个问题,看代码

python关于类的两个问题,看代码

傲能有多傲╮ 发布于2020-12-31 11:32:00   58浏览

class A:

    a=1

    def pl(self):

        self.a*=2

        print(self.a)

q=A

q.a=2

w=A

print(w.a)

w().pl()

print(w.a)

执行结果为

2

4

2

问题1:为什么 w().pl()中w后面不跟()就会报错:TypeError: pl() missing 1 required positional argument: 'self'

问题2:最后一个print 的结果为啥不是4呢?

新手无金币,见谅~

评论( 2
我要评论
  1. 德卡先生 2020-12-31 11:36:29
    1.因为W和A是类  这是一种类型,需要实例化,就像有个玩偶的模具 这个模具是类  然后用这个模具做出来了一个玩偶  这个玩偶就是这个模具的实例化,实例化之后的self表示这个玩偶。   然后你那个函数有引用self,表示这是一个实例的函数,所以只能作用在实例(也就是加了括号之后的)。而a是类的属性,相当于模具的属性,所以不加括号就可以用。
    
    2.最后一个print是2是因为这个a是模具的属性,所以只有前面q那里改了一次,至于函数pl里面改的那个相当于你给玩偶加个蝴蝶结,那模具是没有改动的,所以模具是仍然没变的。
    (0) 回复 举报
  2. 绷带长颈鹿︿ 2020-12-31 11:40:34
    问题1:为什么 w().pl()中w后面不跟()就会报错:TypeError: pl() missing 1 required positional argument: 'self' 因为你必须实例化才能调用其内部函数 问题2:最后一个print 的结果为啥不是4呢? 还是一样道理,因为你没有具体实例化对象,所以还是没运行函数,你可以改成以下情况对比下就知道了
    
    (0) 回复 举报

还可以上传7

表情
热帖排行
热门话题
  1. 01 304人参与
  2. 02 186人参与
  3. 03 115人参与
  4. 04 57人参与
  • QQ扫码
  • 微信扫码