Python面对对象之初始化方法(__int__方法)


Python面对对象之初始化方法

当使用 类名() 创建对象时,会 自动 执行以下操作:
    1.为对象在内存中 分配空间 —— 创建对象
    2.为对象的属性 设置初始值 —— 初始化方法(init)
这个初始化方法 就是 __init__ 方法,__init__ 是对象的内置方法

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

_int_方法的使用

在 Cat 中增加 init 方法,该方法在创建对象时会被自动调用

class Cat:
    """这是一个猫类"""

    def __init__(self):
        print("初始化方法")
tom = Cat()
输出:
初始化方法

与_int_方法对比对比

class Cat:

    def eat(self):
        print("%s 爱吃鱼" % self.name)

tom = Cat()
输出:

在初始化方法-类内部定义属性(类内部封装)

类内部封装方法二、

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

    def __init__(self):
        print("hhhhh")

        # 定义用 Cat 类创建的猫对象都有一个 name 的属性
        self.name = "YAN"

    def eat(self):
        print("%s 爱吃鱼" % self.name)
# 使用类名()创建对象的时候,会自动调用初始化方法 __init__
tom = Cat()
tom.eat()
输出:
hhhhh
YAN 爱吃鱼

改造初始化方法 —— 初始化的同时设置初始值(就是通过外部传参给类内部)

在开发中,如果希望在 创建对象的同时,就设置对象的属性,可以对 init 方法进行改造

把希望设置的属性值,定义成 __init__ 方法的参数
在方法内部使用 self.属性 = 形参 接收外部传递的参数。
【只有需要从外部传入的参数,才需要把这些参数定义成初始化方法的形参,如果某些参数不需要外部传递,就不需要额外增加那些参数,直接 self.属性 = 设定的某初始值】
在创建对象时,使用类名(属性1, 属性2...) 调用
class Cat:

    def __init__(self, name):
        print("hhh %s" % name)
        self.name = name


tom = Cat("Tom")
lazy_cat = Cat("大懒猫")
输出:
hhh Tom
hhh 大懒猫

定义没有初始值的属性

在定义属性时,如果 不知道设置什么初始值,可以设置为 None

None 关键字表示什么都没有
表示一个空对象,没有方法和属性,是一个特殊的常量
可以将 None 赋值给任何一个变量

一个对象的属性可以是另外一个类创建的对象

在这里插入图片描述

class Gun:
    def __init__(self, model):
        self.model = model
        self.bullet_count = 0
    def add_bullet(self, count):
        self.bullet_count += count
    def shoot(self):
        if self.bullet_count <= 0:
            print("[%s] 没有子弹了..." % self.model)
            return
        self.bullet_count -= 1
        print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))

class Soldier:
    def __init__(self, name):
        self.name = name
        self.gun = None
    def fire(self):
        if self.gun == None:
            print("[%s] 还没有枪..." % self.name)
            return
        print("冲啊...[%s]" % self.name)
        self.gun.add_bullet(50)
        self.gun.shoot()
# 创建枪对象
ak47 = Gun("AK47")
# 创建士兵
yan = Soldier("yan")
yan.gun = ak47
yan.fire()
输出:
冲啊...[yan]
[AK47] 突突突... [49]
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值