zoukankan      html  css  js  c++  java
  • 82.魔法方法__str__()

    魔法方法__str__()

    class Hero(object):
        """定义了一个英雄类,可以移动和攻击"""
    
        def __init__(self, name, skill, hp, atk, armor):
            """ __init__() 方法,用来做变量初始化 或 赋值 操作"""
            # 英雄名
            self.name = name  # 实例变量
            # 技能
            self.skill = skill
            # 生命值:
            self.hp = hp   # 实例变量
            # 攻击力
            self.atk = atk
            # 护甲值
            self.armor = armor
    
        def move(self):
            """实例方法"""
            print("%s 正在前往事发地点..." % self.name)
    
        def attack(self):
            """实例方法"""
            print("发出了一招强力的%s..." % self.skill)
    
        # def info(self):
        #     print("英雄 %s 的生命值 :%d" % (self.name, self.hp))
        #     print("英雄 %s 的攻击力 :%d" % (self.name, self.atk))
        #     print("英雄 %s 的护甲值 :%d" % (self.name, self.armor))
    
    
        def __str__(self):
            """
                这个方法是一个魔法方法 (Magic Method) ,用来显示信息
                该方法需要 return 一个数据,并且只有self一个参数,当在类的外部 print(对象) 则打印这个数据
            """
            return "英雄 <%s> 数据: 生命值 %d, 攻击力 %d, 护甲值 %d" % (self.name, self.hp, self.atk, self.armor)
    
    
    taidamier = Hero("泰达米尔", "旋风斩", 2600, 450, 200)
    gailun = Hero("盖伦", "大宝剑", 4200, 260, 400)
    
    # 如果没有__str__ 则默认打印 对象在内存的地址。
    # 当类的实例化对象 拥有 __str__ 方法后,那么打印对象则打印 __str__ 的返回值。
    print(taidamier)
    print(gailun)
    
    # 查看类的文档说明,也就是类的注释
    print(Hero.__doc__)

    说明:

    在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法

    当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__(self)方法,那么就会打印从在这个方法中 return 的数据

    __str__方法通常返回一个字符串,作为这个对象的描述信息

    # 使用__init__方法,在创建某个动物对象时,为其添加name、age、color、food等属性,如“熊猫”,5, “黑白”,“竹子”
    #
    # 为动物类定义一个run方法,调用run方法时打印相关信息,如打印出“熊猫正在奔跑”
    #
    # 为动物类定义一个get_age方法,调用get_age方法时打印相关信息,如打印出“这只熊猫今年5岁了”
    #
    # 为动物类定义一个eat方法,调用eat方法时打印相关信息,如打印出“熊猫正在吃竹子”
    #
    # 通过动物类分别创建出3只不同种类的动物,分别调用它们的方法,让他们“xx正在奔跑”,“这只xx今年x岁了”,“xx正在吃xxx”
    class Pandas(object):
        # 添加属性并赋值
        def __init__(self, name, age, color, food):
            self.name = name
            self.age = age
            self.color = color
            self.food = food
        # 追踪对象属性值的变化
        def __str__(self):
            return "名字:%s
    年龄:%d
    颜色:%s
    食物:%s" % (self.name, self.age, self.color, self.food)
        def run(self):
            print("%s正在奔跑" % self.name)
        def get_age(self):
            print("这只%s今年%d岁了" % (self.name, self.age))
        def eat(self):
            print("%s正在吃%s" % (self.name, self.food))
    xm = Pandas("熊猫", 5, "黑白", "竹子")
    print(xm)
    xm.run()
    xm.get_age()
    xm.eat()
    hz = Pandas("猴子", 2, "黄色", "香蕉")
    print(hz)
    hz.run()
    hz.get_age()
    hz.eat()
    sz = Pandas("狮子", 2, "棕色", "羚羊")
    print(sz)
    sz.run()
    sz.get_age()
    sz.eat()

    例子:

    # 定义一个汽车类,并在类中定义一个move方法,
    # 然后分别创建BMW_X9、AUDI_A9对象,并添加颜色(color)、马力(horsepower)、型号(model)属性,
    # 然后分别打印出属性值、调用move方法(xx汽车行驶在公路上)(使用__init__方法完成属性赋值)
    # 自定义一个汽车类
    class Car(object):
    
        # 实现魔法方法
        def __init__(self, color, horsepower, model):
            """
            :param color: 颜色
            :param horsepower:马力
            :param model: 型号
            """
            self.color = color
            self.horsepower = horsepower
            self.model = model
    
        # 实现str魔法方法
        def __str__(self):
            return "车的名字:%s,颜色:%s,马力:%d" % (self.model, self.color, self.horsepower)
    
        # 完成汽车对象的行驶
        def move(self):
            print("%s汽车行驶在公路上" % self.model)
    
    # BMW_X9
    BMW_X9 = Car("白色", 300, "BMW_X9")
    print(BMW_X9)
    BMW_X9.move()
    # AUDI_A9
    AUDI_A9 = Car("黑色", 320, "AUDI_A9")
    print(AUDI_A9)
    AUDI_A9.move()

    例子:

    # 使用__init__方法,在创建某个动物对象时,为其添加name、age、color、food等属性,如“熊猫”,5, “黑白”,“竹子”
    # 为动物类定义一个run方法,调用run方法时打印相关信息,如打印出“熊猫正在奔跑”
    # 为动物类定义一个get_age方法,调用get_age方法时打印相关信息,如打印出“这只熊猫今年5岁了”
    # 为动物类定义一个eat方法,调用eat方法时打印相关信息,如打印出“熊猫正在吃竹子”
    # 通过动物类分别创建出3只不同种类的动物,分别调用它们的方法,让他们“xx正在奔跑”,“这只xx今年x岁了”,“xx正在吃xxx”
    
    # 自定义动物类
    class Animal(object):
    
        # 实现init方法
        def __init__(self, name, age, color, food):
            # 完成属性添加并赋值
            self.name = name
            self.age = age
            self.color = color
            self.food = food
    
        # 追踪对象属性值变化
        def __str__(self):
            return "名字:%s, 年龄:%d, 颜色:%s, 食物:%s" % (self.name, self.age, self.color, self.food)
    
        # 描述动物在奔跑
        def run(self):
            print("%s正在奔跑" % self.name)
    
        # 获取动物的年龄
        def get_age(self):
            print("这只%s今年%d岁了" % (self.name, self.age))
    
        # 食物
        def eat(self):
            print("%s正在吃%s" % (self.name, self.food))
    
    # 创建一只熊猫
    xm = Animal("熊猫", 5, "黑白", "竹子")
    print(xm)
    # 奔跑
    xm.run()
    # 年龄
    xm.get_age()
    # 食物
    xm.eat()
    
    # 创建一个狗
    wc = Animal("旺财", 2, "黄色", "骨头")
    print(wc)
    wc.run()
    wc.get_age()
    wc.eat()

    例子:

    # 需求: 人 - 名字 年龄(18) 学号
    # 自定义一个人类
    class Person(object):
    
        # 添加属性并赋值
        def __init__(self, name, no, age=18):
            # 名字
            self.name = name
            # 学号
            self.no = no
            # 年龄
            self.age = age
    
        # 自定义一个方法 负责对象的属性值输出
        # def print_info(self):
        #     print("姓名:%s" % self.name)
        #     print("年龄:%d" % self.age)
        #     print("学号:%s" % self.no)
        # 追踪对象属性值变化
        # 必须要返回一个字符串
        # 魔法方法是有返回值的
        def __str__(self):
            return "姓名:%s
    年龄:%d
    学号:%s" % (self.name,
                                            self.age,
                                            self.no)
    # # 小明 18 001
    # xm = Person("小明", "001")
    # xm.print_info()
    # # 小红 19 002
    # xh = Person("小红", "002", 19)
    # xh.print_info()
    
    # 优化
    xm = Person("小明", "001")
    # 默认情况下 打印一个自定义对象时候 输出为16进制地址
    # 如果在其类中实现了 __str__()魔法方法 那么python会输出__str__()魔法方法的返回值
    print(xm)
  • 相关阅读:
    Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点
    Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
    Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线
    Civil 3D 二次开发 新建CLR项目出现错误C2143
    Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
    了解AutoCAD对象层次结构 —— 6 ——块表记录
    datepicker97使用
    使用angular 外接 templateUrl,使用ng-include
    angularJs 遮罩
    网上找的有关css兼容问题
  • 原文地址:https://www.cnblogs.com/kangwenju/p/12866588.html
Copyright © 2011-2022 走看看