Python方法中的self参数和__init__函数学习

1、self参数的理解

在pycharm中输入如下代码

class Cat:
    def eat(self):
        print("小猫爱吃鱼")
    def drink(self):
        print("小猫爱喝水")

tom = Cat()
tom.name = "大黄"  # 此书写方式只是演示,日常编写不推荐使用,应该封装在类的内部
tom.eat()
tom.drink()

在创建对象tom = Cat() 处打下断点,再debug后进行单目执行,此时发现tom变量在内存中的地址为0x000002190C21F190,如下图

再接着按F8,当程序执行到第9行tom.eat() 处时,按键盘F7,进入到eat方法中,如下图:

可看到,self也是Cat对象,self在内存中的地址与tom对象在内存中的地址一样,同时,self也有name属性,且属性值与tom的name属性值一致。通过此次断点调试发现:

在tom变量调用eat方法时,self就是tom这个变量,也就是说,哪一个对象调用此方法,self就是哪一个对象的引用。

哪一个对象 调用的方法,方法内的 self 就是 哪一个对象的引用

  • 在类封装的方法内部,self 就表示 当前调用方法的对象自己
  • 调用方法时,程序员不需要传递 self 参数
  • 在方法内部
    • 可以通过 self. 访问对象的属性
    • 也可以通过 self. 调用其他的对象方法
  • 在日常开发中,应避免在类的外部给对象增加属性,因为如果在运行时没有找到该属性,程序是会报错的,对象包括哪些属性应该封装在类的内部。

2、__init__()函数的理解

当使用 类名()  创建对象时,python解释器会自动执行以下操作:

1)  为对象在内存中分配空间——创建对象

2)为对象的属性设置初始值——初始化方法(该初始化方法就是__init__方法,它是对象的内置方法)

__init__方法是专门  用来定义一个类 具有哪些属性  的方法!

2.1 python会自动执行初始化函数__init__():

当tom对象被创建时,类中的__init__方法会被自动调用,如下图所示:

2.2 在初始化函数__init__()内部中定义属性

  • 在 __init__ 方法内部使用 self.属性名 = 属性的初始值 就可以 定义属性
  • 定义属性之后,再使用 Cat 类创建的对象,都会拥有该属性

在代码中给类添加了属性name,该属性的值为“Tom”,tom对象使用Cat类创建后,tom对象自动拥有了name属性,如下图:

2.3初始化函数__init__()方法改造,初始化的同时设置初始值

我们再创建一个garfield 对象,garfield 在调用eat方法时,它和tom在调用eat方法时打印的语句完全一样,因为name属性在初始化时给了默认值“Tom”。

为了能让使用Cat类创建的多个对象都有自己的name属性,且属性值不一样,可以在__init__函数中增加一个形参。

  • 在开发中,如果希望在 创建对象的同时,就设置对象的属性,可以对 __init__ 方法进行 改造
    1. 把希望设置的属性值,定义成 __init__ 方法的参数
    2. 在方法内部使用 self.属性 = 形参 接收外部传递的参数
    3. 在创建对象时,使用 类名(属性1, 属性2...) 调用

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值