79.实例方法内通过self获取对象属性

实例方法内通过self获取对象属性

class Hero(object):
    """定义了一个英雄类,可以移动和攻击"""
    def move(self):
        """实例方法"""
        print("正在前往事发地点...")

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

    def info(self):
        """在类的实例方法中,通过self获取该对象的属性"""
        print("英雄 %s 的生命值 :%d" % (self.name, self.hp))
        print("英雄 %s 的攻击力 :%d" % (self.name, self.atk))
        print("英雄 %s 的护甲值 :%d" % (self.name, self.armor))


# 实例化了一个英雄对象 泰达米尔
taidamier = Hero()

# 给对象添加属性,以及对应的属性值
taidamier.name = "泰达米尔"  # 姓名
taidamier.hp = 2600  # 生命值
taidamier.atk = 450  # 攻击力
taidamier.armor = 200  # 护甲值

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

问题:

创建对象后再去添加属性有点不合适,有没有简单的办法,可以在创建对象的时候,就已经拥有这些属性?

# 创建两个对象
# 金毛 -> (金毛 2 黄色)
# 藏獒 -> (藏獒 3 黑色)

# 自定义犬类
class Dog(object):
    # self是谁: 取决于哪个对象调用了这个方法
    # def func(self):
    #     print(self)

    # 实例方法(对象方法) 默认的第一个参数为self
    # 程序员也可以自己命名 一般直接使用默认
    def print_info(self):
        print(self.name)
        print(self.age)
        print(self.color)

# 创建一只金毛
jm = Dog()
# <__main__.Dog object at 0x0000000000D6B2E8>
# 如果打印一个对象的时候 默认输出的是16进制地址
# print(jm)
# jm.func(jm)
# (金毛 2 黄色)
# 添加属性
jm.name = "金毛"
jm.age = 2
jm.color = "黄色"
# 获取属性
# print(jm.name)
# print(jm.age)
# print(jm.color)
# print_info(jm)
jm.print_info()

# 创建一只藏獒
za = Dog()
# (藏獒 3 黑色)
za.name = "藏獒"
za.age = 3
za.color = "黑色"
# 获取属性
# print(za.name)
# print(za.age)
# print(za.color)
# print_info(za)
za.print_info()
原文地址:https://www.cnblogs.com/kangwenju/p/12866507.html