80.魔法方法__init__()

魔法方法__init__()

class Hero(object):
    """定义了一个英雄类,可以移动和攻击"""
    # Python 的类里提供的,两个下划线开始,两个下划线结束的方法,就是魔法方法,__init__()就是一个魔法方法,通常用来做属性初始化 或 赋值 操作。
    # 如果类面没有写__init__方法,Python会自动创建,但是不执行任何操作,
    # 如果为了能够在完成自己想要的功能,可以自己定义__init__方法,
    # 所以一个类里无论自己是否编写__init__方法 一定有__init__方法。

    def __init__(self):
        """ 方法,用来做变量初始化 或 赋值 操作,在类实例化对象的时候,会被自动调用"""
        self.name = "泰达米尔" # 姓名
        self.hp = 2600 # 生命值
        self.atk = 450  # 攻击力
        self.armor = 200  # 护甲值

    def move(self):
        """实例方法"""
        print("正在前往事发地点...")

    def attack(self):
        """实例方法"""
        print("发出了一招强力的普通攻击...")


# 实例化了一个英雄对象,并自动调用__init__()方法
taidamier = Hero()

# 通过.成员选择运算符,获取对象的实例方法
taidamier.info() # 只需要调用实例方法info(),即可获取英雄的属性
taidamier.move()
taidamier.attack()

说明:

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

问题:

在类的方法里定义属性的固定值,则每个对象实例变量的属性值都是相同的。

一个游戏里往往有很多不同的英雄,能否让实例化的每个对象,都有不同的属性值呢?

# 创建无数个对象 有相同的属性名 但是属性值也一定是一样
# 创建两只狗
# 旺财 2 黄色
# 自定义犬类
class Dog(object):

    # 魔法方法: 以两个下划线开头 以两个下划线结尾
    # 魔法方法 会在特殊的情况下被python调用
    # 监听到通过这类创建对象成功后 会被python调用
    # 帮助我们完成给对象添加属性并赋值
    # 魔法方法是父类(object)提供
    # 子类只需要实现父类的方法即可
    def __init__(self):
        print("__init__")
        # 添加属性并赋值
        self.name = "旺财"
        self.age = 2
        self.color = "黄色"

    # 定义一个方法 完成对对象添加属性并赋值
    # def set_info(self):
    #     # 添加属性
    #     self.name = "旺财"
    #     self.age = 2
    #     self.color = "黄色"

    # 定义一个实例方法
    def print_info(self):
        print("名字:%s" % self.name)
        print("年龄:%d" % self.age)
        print("毛色:%s" % self.color)
# 第一只
# wc1 = Dog()
# # 添加属性
# # wc1.name = "旺财"
# # wc1.age = 2
# # wc1.color = "黄色"
# wc1.set_info()
# wc1.print_info()
#
# # 另一只
# wc2 = Dog()
# # 添加属性
# # wc2.name = "旺财"
# # wc2.age = 2
# # wc2.color = "黄色"
# wc2.set_info()
# wc2.print_info()

# 优化
wc1 = Dog()
wc1.print_info()

wc2 = Dog()
wc2.print_info()
原文地址:https://www.cnblogs.com/kangwenju/p/12866530.html