Python07--内置函数

1,_ _ init _ _() 方法

(1)python的类里提供的,两个下划线开始,两个下划线结束的方法就是魔法方法,_ _ into _ () 方法就是一个魔法方法,通常用来执行属性初始化或赋值操作。
(2)一个类里面,无论自己是否编写
_ into _ () 方法,类里面一定会有一个 _ into _ () 方法;如果类没有写 _ into _ () 方法,python会自动创建,但是不执行任何操作。如果有自己想要的功能,那就自己定义 _ into _ _() 方法就可以。

class Enemy(object):
    def __init__(self):
        self.name = '珊珊'
        self.hp = 999      # 生命值
        self.attack = 888  # 攻击力
        self.DEF = 3999    # 防御力

    def get_attack(self):
        print("敌人受到攻击!")
    def set_attack(self):
        print("敌人开始攻击!")
    def print_info(self):
        print("敌人 %s 的生命值 : %d" % (self.name , self.hp))
        print("敌人 %s 攻击力 : %d" % (self.name , self.attack))
        print("敌人 %s 防御力 : %d" % (self.name , self.DEF))
# 实例化一个对象,并自动调用__init__()方法
thanos = Enemy()

# 获取对象的实例方法
thanos.print_info()
thanos.set_attack()
thanos.get_attack()

显示结果:
 __init__() 方法
注意:

  1. _ _ init _ _() 方法在创建一个对象的时候默认被调用,不需要手动调用。
  2. _ _ init _ _(self)中的self参数不需要开发者传递,python解释器会自动把当前的对象引用传递过去。

2,有参数的 _ _ init _ _() 方法

_ _ init _ _(self,x,y)默认一个参数名字为self,如果创建对象的时候传递了多个实参,那么在定义的时候,除了第一个形参self,还需要定义对应的形参。

class Enemy(object):
    def __init__(self, name, skill, hp, attack, DEF):
        # 姓名
        self.name = name 
        # 技能
        self.skill = skill
        # 生命值
        self.hp = hp
        # 攻击力
        self.attack = attack
        # 防御力
        self.DEF = DEF
    def set_attack(self):
        print("敌人开始攻击!")
    def get_attack(self):
        print("敌人受到攻击!")
    def print_info(self):
        print("敌人 %s 的生命值 : %d" % (self.name , self.hp))
        print("敌人 %s 攻击力 : %d" % (self.name , self.attack))
        print("敌人 %s 防御力 : %d" % (self.name , self.DEF))
        print("敌人 %s 技能 : %s" % (self.name , self.skill))



# 实例化一个对象,并自动调用__init__()方法
thanos = Enemy('珊珊','打怪',999,888,19999)
anglim = Enemy('豆豆','躲猫猫',777,333,39999)

# 获取对象的实例方法
thanos.print_info()
anglim.print_info()

# 不同对象的相同属性单独保存
print(id(thanos.skill))
print(id(anglim.skill))

# 同一个类的不同对象,实例方法共享
print(id(thanos.get_attack()))
print(id(anglim.get_attack()))

显示结果:
有参数的__init__() 方法
注意:

  1. 在类内部获取属性和实例的方法,通过self获取。
  2. 在类外部获取属性和实例的方法,通过对象名获取。
  3. 如果一个类有多个对象,那么每个对象的属性是各自保存的,且有自己独立的内存地址id。
  4. 实例方法是所有对象共享的,只是占用一份内存空间。类会通过self来判断调用实例方法的对象。

3,_ _ str _ _() 方法

(1)_ _ str _ () 方法通常返回一个字符串作为这个对象的描述信息
(2)使用python输出对象的时候,默认打印的是对象的内存地址,如果定义了
_ str _ _(self) 方法,那么就会打印调用这个方法返回的数据。

class Enemy(object):
    def __init__(self, name, skill, hp, attack, DEF):
        # 姓名
        self.name = name 
        # 技能
        self.skill = skill
        # 生命值
        self.hp = hp
        # 攻击力
        self.attack = attack
        # 防御力
        self.DEF = DEF
    def set_attack(self):
        print("敌人开始攻击!")
    def get_attack(self):
        print("敌人受到攻击!")
    def print_info(self):
        print("敌人 %s 的生命值 : %d" % (self.name , self.hp))
        print("敌人 %s 攻击力 : %d" % (self.name , self.attack))
        print("敌人 %s 防御力 : %d" % (self.name , self.DEF))
        print("敌人 %s 技能 : %s" % (self.name , self.skill))
    
    def __str__(self):
        return "敌人【%s】:生命值 %d,攻击力 %d,防御力 %d ,技能 %s" % (self.name,self.hp,self.attack,self.DEF,self.skill)


# 实例化一个对象,并自动调用__init__()方法
thanos = Enemy('珊珊','打怪',999,888,19999)
anglim = Enemy('豆豆','躲猫猫',777,333,39999)

# 获取对象的实例方法
print(thanos)
print(anglim)

# 查看类的文档说明,也就是类的注释
print(Enemy.__doc__)

显示结果:
_ _ _str_ _ _() 方法

4,_ _ del _ _() 方法

(1)_ _ del _ _() 方法是记录对象删除信息。
(2)当有变量保存了一个对象的引用是,此对象的引用计数会加1。
(3)当使用del()函数删除变量指向的对象是,则会减少对象的引用计数。如果对象的引用计数不为1,那么会让这个对象的引用计数减1,当对象的引用计数为0的时候,对象才会被真正的删除。

class Enemy(object):
    def __init__(self,name):
        print("---------------程序开始执行---------------------")
        print("---------------调用__init__()方法---------------------")
        self.name = name

    def __del__(self):
        print("------__del__()方法自动调用")
        print("%s 被干掉了 " %self.name)

# 创建实例化对象
thanos = Enemy('珊珊')

# 删除对象
print("%d 被删除 " % id(thanos))
del(thanos)

print("*" * 30)
thanos = Enemy('珊珊')
thanos1 = thanos
thanos2 = thanos

print("%d 被删除 " % id(thanos))
del(thanos)
print("%d 被删除 " % id(thanos1))
del(thanos1)
print("%d 被删除 " % id(thanos2))
del(thanos2)

显示结果:
_ _ _del_ _ _() 方法

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓之以理的喵~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值