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