魔法方法__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()