主要內容:
- 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. 類中的特殊成員