python 面向對象類與類之間的關系


主要內容:

  • 1. 依賴關系
  • 2. 關聯關系, 組合關系, 聚合關系
  • 3. 繼承關系
  • 4. 類中的特殊成員

引子

  • 大千世界, 萬物之間皆有規則和規律,我們的類和對象是對大千世界中的所有事物進行歸類.
  • 那事物之間存在着相對應的關系. 類與類之間也同樣如此.
  • 在面向對象的世界中. 類與類中存在以下關系:依賴關系 ,關聯關系 ,組合關系 ,聚合關系 ,繼承關系 ,實現關系   
  • 由於python是一門弱類型編程語言,並且所有的對象之間其實都是多態的關系.也就是說,所有的東西都可以當做對象來使用. 所以我們在寫代碼的時候很容易形成以上關系

1. 依賴關系

關於大象進冰箱的問題:

 
class Elephant:
    def __init__(self,name):
        self.name = name
    def open(self,ref):
        print("冰箱,開門吧")
        ref.open_door()
    def close(self,ref):
        print("冰箱關門吧")
        ref.close_door()
    def enter(self):
        print("進冰箱裝自己")

class Fridge:
    def __init__(self):
        pass
    def open_door(self):
        print("冰箱打開了門")
    def close_door(self):
        print("冰箱關上了門")

E=Elephant("tony")
F1=Fridge()
E.open(F1)
E.enter()
E.close(F1)
 

就是大象和冰箱之間的關系是一種依賴關系,大象可以選擇任何一個冰箱(我們可以通過類來創造出很多個 冰箱),甚至作為大象我可以選擇冰箱甚至可以進高壓鍋,可以說此時的大象有選擇的權利.

2. 關聯關系, 組合關系, 聚合關系

 
class Boy:
    def __init__(self,name,character,girlfriend=None):
        self.name = name
        self.character = character
        self.girlfriend = girlfriend
    def xiangqin(self,girl):
        self.girlfriend = girl
    def eat(self):
        if self.girlfriend:
            print("吃東西好難,吃啥都不對")
        else:
            print("單身狗,狗糧夠嗎")
class Girl:
    def __init__(self,name,boyfriend):
        self.name = name
        self.boyfriend =boyfriend
    def eat(self):
        print ("%s在吃飯" % self.name)

g = Girl("排骨精","八戒")
b = Boy("豬八戒","呵呵")
b.xiangqin(g)
b.eat()
 

這是典型的一對一的關聯關系,兩個類的對象緊密練習着,關聯關系, 其實就是我需要你,你也屬於我這就是關聯關系

 
class School:
    def __init__(self,name,address,phone):
        self.name = name
        self.address = address
        self.phone = phone
        self.__teach_list = []
    def zhaopin(self,t):
        self.__teach_list.append(t)
    def display(self):
        for el in self.__teach_list:
            print(el.name,el.hobby)

class Teacher:
    def __init__(self,name,gender,salary,hobby,school):
        self.name = name
        self.gender = gender
        self.salary = salary
        self.hobby = hobby
        self.school = school

oldboy_bj = School("北京老男孩", "美麗富饒的沙河", "10086")
oldboy_sh = School("北京老男孩, 上海分校", "上海浦東", "10010")
oldboy_sz = School("北京老男孩, 深圳分校(騎士計划)", "南山區", "10000")

t1 = Teacher("配齊", "男", 200000, "上課", oldboy_bj)
t2 = Teacher("太白", "男", 150000, "開車", oldboy_bj)
t3 = Teacher("Eggon", "男", 123456, "鑽研技術", oldboy_sh)
t4 = Teacher("高鑫", "女", 45678, "相夫教子", oldboy_sz)
t5 = Teacher("日天", "男", 666, "看天", oldboy_sz)

oldboy_bj.zhaopin(t1)
oldboy_bj.zhaopin(t2)
oldboy_bj.display()

oldboy_sh.zhaopin(t3)
oldboy_sz.zhaopin(t4)
oldboy_sz.zhaopin(t5)
oldboy_sz.display()
 

老師必然屬於⼀個學校. 換句話說,每個老師肯定有⼀個指定的工作機構. 就是學校,那老師的屬性中必然關聯着學校(一對多的情況)

3. 繼承關系

 
class Base:
    def __init__(self, num):
        self.num = num
    def func1(self):
        print(self.num)
        self.func2()
    def func2(self):
        print(111, self.num)
class Foo(Base):
    def func2(self):
        print(222, self.num)
lst = [Base(1), Base(2), Foo(3)]
for obj in lst:
    obj.func1()
 

總結:

  • self在訪問方法的順序: 永遠先找自己的,自己的找不到再找父類的. 
  • self就是你訪問方法的那個對象,先找自己, 然后在找父類的. 

4. 類中的特殊成員


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM