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...) 调用

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
提示 CTRL Q: 在参数列表位置,显示可以输入的所有参数。 CTRL Q: 查看选方法的文档字符串 阅读 CTRL -: 折叠当前代码 CTRL +: 展开当前代码 CTRL SHIFT -: 折叠所有代码 CTRL SHIFT +: 展开所有代码 CTRL SHIFT F7: 将当前单词在整个文件高亮,F3移动到下一个,ESC取消高亮。 CTRL F11 | F11: 设置书签. SHIFT F11: 显示所有书签。 CTRL F12: 当一个文件方法太多,要快速跳到某个方法时,可以用此快捷键打开LIST, 除了用上下箭选择外,还可以输入字母。 移动 ALT F7: 查找哪些地方使用了选方法。 ALT UP: 移到上一个方法 ALT DOWN: 移到下一个方法 CTRL B | CTRL 单击: 转到方法定义处 CTRL SHIFT UP: 将当前行上移一行 CTRL SHIFT UP: 将当前行下移一行 SHIFT ENTER: 在行间执行时,智能跳到下一行。 注释 CTRL /: 注释、取消注释行 选择 ALT 左键: 列模式选择 CTRL W: 选当前单词,继续按,选它所属的行/IF/方法. 编辑 CTRL D: 未选时,复制当前行到下一行,选时复制粘贴选部分。 CTRL J: 输入模板 SHIFT F6: 更改变量/方法名字 删除 CTRY Y: 删除当前行 调试 CTRL F8: 设置/取消断点 其它 CTRL E: 最近访问的文件列表 ESC: 焦点从其它窗口到编辑窗口 SHIFT ESC: 隐藏当前窗口,焦点到编辑窗口 F12: 焦点从编辑窗口到上一个使用窗口 编辑器右键,local history, show history: 显示本地修改记录
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值