1. 程式人生 > 實用技巧 >面向物件--有引數的__init__方法

面向物件--有引數的__init__方法

有引數的__init__()方法

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))


# 例項化英雄物件時,引數會傳遞到物件的__init__()方法裡
taidamier = Hero("泰達米爾", "旋風斬", 2600, 450, 200)
gailun = Hero("蓋倫", "大寶劍", 4200, 260, 400)


# print(gailun)
# print(taidamier)

# 不同物件的屬性值的單獨儲存
print(id(taidamier.name)) 
print(id(gailun.name))

# 同一個類的不同物件,例項方法共享
print(id(taidamier.move())) 
print(id(gailun.move()))

說明:

  • 通過一個類,可以建立多個物件,就好比 通過一個模具建立多個實體一樣

  • __init__(self)中,預設有1個引數名字為self,如果在建立物件時傳遞了2個實參,那麼__init__(self)中出了self作為第一個形參外還需要2個形參,例如__init__(self,x,y)

注意:

  1. 在類內部獲取 屬性 和 例項方法,通過self獲取;
  2. 在類外部獲取 屬性 和 例項方法,通過物件名獲取。

  3. 如果一個類有多個物件,每個物件的屬性是各自儲存的,都有各自獨立的地址;

  4. 但是例項方法是所有物件共享的,只佔用一份記憶體空間。類會通過self來判斷是哪個物件呼叫了例項方法。