• 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()
  • 相关阅读:
    Java Web之Tomcat
    Java Web之HTML5
    Java 读取propertoes文件
    SQL Server 触发器
    通过关闭 UseDNS和GSSAPIAuthentication选项加速 SSH登录
    数据库创建索引有什么优点和缺点
    修改查看MYSQL字符集(charset)
    MySQL 数据类型
    远程连接mysql数据库提示:ERROR 1130的解决办法
    怎么快速了解自己的MySQL服务器?
  • 原文地址:https://www.cnblogs.com/kangwenju/p/12866530.html
Copyright © 2020-2023  润新知