1. 程式人生 > >python之路--類與類之間的關係

python之路--類與類之間的關係

類與類之間的關係
  在我們的世界中事物和事物之間總會有一些聯絡.
  在面向物件中. 類和類之間也可以產生相關的關係
  1. 依賴關係
    執行某個動作的時候. 需要xxx來幫助你完成這個操作. 此時的關係是最輕的.
    隨時可以更換另外一個東西來完成此操作

class Person:
    def play(self, tools): # 通過引數的傳遞把另外一個類的物件傳遞進來
        tools.run()
        print("很開心, 我能玩兒遊戲了")
class Computer:
    def run(self):
        print("電腦開機. 可以執行")
class Phone:
    def run(self):
        print("手機開機, 可以執行")
c = Computer()
phone = Phone()
p = Person()
p.play(phone)

  

# 寫一個植物大戰殭屍
# 1. 植物
#       打殭屍. 殭屍掉血
# 2. 殭屍
#       吃植物. 植物掉血
class Plant:
    def __init__(self, name, hp, ad): # 200
        self.name = name
        self.hp = hp
        self.ad = ad
    def attack(self, js):
        print("植物攻擊殭屍")
        js.hp -= self.ad
        print(f"殭屍掉血{self.ad}, 還剩下{js.hp}")
class JiangShi:
    def __init__(self, name, hp, ad): # 1000  800
        self.name = name
        self.hp = hp
        self.ad = ad
    def attack(self, zw):
        print("殭屍咬植物")
        zw.hp -= self.ad
        print(f"植物掉血{self.ad}, 還剩{zw.hp}")
# 植物
wd = Plant("歪脖子豌豆", 10, 20)
# 殭屍
js = JiangShi("鐵桶殭屍", 200, 1)
wd.attack(js)
wd.attack(js)
js.attack(wd)
js.attack(wd)
wd.attack(js)

  

  2. 關聯關係
    在物件裡面埋物件
    self.girlFriend = girl
    1. 一對一關係
      你和你的女朋友

class Boy:
    def __init__(self, name,  girlFriend=None):
        # 在初始化的時候可以給一個物件的屬性設定成另一個類的物件
        self.girlFriend = girlFriend  # 一個男孩有一個女朋友
    def chi(self):
        if self.girlFriend:
            print(f"帶著他的女朋友{self.girlFriend.name}去吃飯")
        else:
            print("單身狗, 吃什麼吃? 滾去學習.")

  

    self.teach_list = [t1,t2,t3]
    2. 一對多關係
      一個學校. 一堆老師

class School:
    def __init__(self, name):
        self.teach_list = [] # 這裡要裝多個老師
        self.name = name
    def zhaopin(self, teach):
        self.teach_list.append(teach)
    def shangke(self):
        for t in self.teach_list:
            t.work()
class Teacher:
    def __init__(self, name):
        self.name = name
    def work(self):
        print(f"{self.name}在上課")

lnh = School("老男孩")
t1 = Teacher("武sir")
t2 = Teacher("太白")
t3 = Teacher("哪吒")
lnh.zhaopin(t1)
lnh.zhaopin(t2)
lnh.zhaopin(t3)
lnh.shangke()

  3. self 是誰  

    self:誰呼叫的就是誰. 型別是根據呼叫方的物件來進行變換的
    super:表示的是父類

  4.特殊成員

    __init__() # 建立物件的時候初始化操作
    __call__() # 物件()
    __getitem__() # 物件[哈哈]
    __setitem__() # 物件[哈哈] = 值
    __new__() # 建立物件的時候.開闢記憶體
    __enter__() # with 物件
    __exit__() #結束with的時候
    __hash__() # 可雜湊 hash()