1. 程式人生 > >面向對象基礎總結

面向對象基礎總結

英雄 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(綁定類)跟綁定給對象是一樣的,誰綁定的就誰來調用,誰幫定的就將誰當作第一參數傳入


非綁定方法,就是一個普通函數
特性:既不跟類綁定,也不跟對象綁定,這意味著誰都能用
誰來用都是一個普通函數,也就是說沒有自動傳值的特性了

面向對象基礎總結