实例方法内通过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()