面向對象基礎總結
阿新 • • 發佈:2018-04-16
英雄 object 對象 攻擊力 .info pytho 9.png super 規則
對象是特征和金恩過的結合體
類一系列對象相似的特征和技能的結合體
註意:在定義類的階段會立刻執行類體內的代碼,然後將產生的名字存放於類的名稱空間
繼承
# 繼承:它爹有的它都能拿來用 class LoL: def __init__(self,name,aggressivity ,hp): self.name=name self.aggressivity=aggressivity self.hp=hp class AD(LoL): def info(self): print(‘%s射手英雄,她的攻擊力為%s,血量為%s‘%(self.name,self.aggressivity,self.hp)) class AP(LoL): def info(self): print(‘%s法師英雄,她的攻擊力為%s,血量為%s‘%(self.name,self.aggressivity,self.hp)) ad=AD(‘vn‘,85,450) ap=AP(‘ez‘,60,450) ad.info()#vn射手英雄,她的攻擊力為85,血量為450 ap.info()#ez法師英雄,她的攻擊力為60,血量為450
派生
# 派生:子類定義自己的屬性,如果與父類同名,以子類為準 # 派生的用法 # 方式一:指名道姓class LoL: def __init__(self,name,aggressivity ,hp): self.name=name self.aggressivity=aggressivity self.hp=hp class AD(LoL): print(‘%s射手英雄,她的攻擊力為%s,血量為%s‘) class AP(LoL): def __init__(self,name,aggressivity ,hp,magic): LoL.__init__(self,name,aggressivity,hp) self.magic=magic print(‘%s法師英雄,她的攻擊力為%s,血量為%s‘) ad=AD(‘vn‘,85,450) ap=AP(‘ez‘,60,450,90) print(ap.__dict__)#{‘name‘: ‘ez‘, ‘aggressivity‘: 60, ‘hp‘: 450, ‘magic‘: 90} #方式二super()調用(嚴格依賴於繼承關系) class LoL: def __init__(self,name,aggressivity ,hp): self.name=name self.aggressivity=aggressivity self.hp=hp class AD(LoL): print(‘%s射手英雄,她的攻擊力為%s,血量為%s‘) class AP(LoL): def __init__(self,name,aggressivity ,hp,magic): super().__init__(name,aggressivity ,hp) self.magic=magic print(‘%s法師英雄,她的攻擊力為%s,血量為%s‘) ad=AD(‘vn‘,85,450) ap=AP(‘ez‘,60,450,90) print(ap.__dict__)#{‘name‘: ‘ez‘, ‘aggressivity‘: 60, ‘hp‘: 450, ‘magic‘: 90}
繼承的屬性查找
查找順序:
自己--->類--->父類--->object
在這我們要說一個概念:class 爹:的父類默認為object即class 爹(object):
#函數加括號調用,print(函數加括號)調用並得到其返回值 print(函數名)得到的是內存地址 # 綁定對象(只能對象用) class A(object): def b(self): x = 2 print(‘b‘) return x a = A() print(a.b) # <bound method A.b of <__main__.A object at 0x000001F4393D9B38>> print(A.b) # <function A.b at 0x000001F4393DC730> # 綁定類(類體內的對象和類東可以用) class A(object): @classmethod def b(cls): x=2 print(‘b‘) return x a = A() print(a.b()) # <bound method A.b of <class ‘__main__.A‘>> print(A.b()) # <bound method A.b of <class ‘__main__.A‘>>
組合
# 組合:一個類產生的屬性的值,就是另一個類實例化的對象 # 一個類產生的對象,該對象有一個屬性,這個屬性的值,就是另一個類的實例化的對象 # 實例化 是你只要調用了類就是實例化對象,跟init方法無關 init只是用來初始化的 class Date: def __init__(self,year, mon, day): self.year = year self.mon = mon self.day = day def info(self): print(‘‘‘ 年:%s 月:%s 日:%s ‘‘‘ % (self.year, self.mon, self.day)) class Oldboypeople: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex class Teacher(Oldboypeople): def __init__(self,name,age,sex,leven,salary): super().__init__(name,age,sex,) self.leven=leven self.salary=salary def inter(self): print(‘學習,選課‘) class Student(Oldboypeople): def __init__(self,name,age,sex,id): super().__init__(name,age,sex) self.id=id def inter(self): print(‘學習,選課‘) tea1=Teacher(‘lxx‘,18,‘man‘,30000,2000,) stu1=Student(‘wxx‘,16,‘man‘,2002,) dat=Date(2000,3,3) tea1.birth=dat tea1.birth.info() stu1=dat stu1.info()
封裝
#封裝:用__的方法將類內的屬性隱藏起來,對內不對外, # __屬性=_類名__屬性名 class Teacher: __x=2 tea=Teacher() print(tea.x) class Teacher: def __x(self): print(‘x‘) tea=Teacher() tea.x() class Teacher: def __init__(self,name): self.__name=name tea=Teacher(‘lxx‘) print(tea.__name)
property
# 使用property(將其偽裝成數據屬性) class Peopele: def __init__(self,name,weight,higiht): self.name=name self.weight=weight self.higiht=higiht @property def bmi(self): return self.weight/(self.higiht*self.higiht) obj=Peopele(‘egon‘,75,1.75) print(obj.bmi)
多態
1 什麽是多態
多態指的是同一種事物多種形態
2、為什要用多態
用基類創建一套統一的規則,強制子類去遵循(使用抽象類實現),這樣便可以
在不用考慮對象具體類型的前提下而直接使用對象下的方法
鴨子類型 python推崇的不是硬性設定,所以鴨子類型就是俗稱約定的東西(你長得像鴨子,走路像鴨子,你就是鴨子)
classmethod(綁定類)跟綁定給對象是一樣的,誰綁定的就誰來調用,誰幫定的就將誰當作第一參數傳入
非綁定方法,就是一個普通函數
特性:既不跟類綁定,也不跟對象綁定,這意味著誰都能用
誰來用都是一個普通函數,也就是說沒有自動傳值的特性了
面向對象基礎總結