day14-類和對象

02-類方法和靜態(tài)方法

類中方法有三種:對象方法嘿棘,類方法骇笔,靜態(tài)方法

1.對象方法

聲明在類中
有默認參數(shù)self
通過對象調(diào)用:對象.對象方法

2.類方法

在聲明前加一個@classmethod
有默認參數(shù)cls,調(diào)用時不需要給cls傳參,系統(tǒng)會自動將調(diào)用類方法的類傳給cls驳概。
cls最終就是這個類宰衙,類可以做的事cls都可以做
通過類去調(diào)用:類.類方法()

3.靜態(tài)方法

聲明前@staticmethod
沒有默認參數(shù)
通過類調(diào)用:類.靜態(tài)方法

4.對三種方法的選擇

什么時候使用對象方法:
當實現(xiàn)函數(shù)功能需要使用對象屬性是就用對象方法

什么時候使用類方法:
實現(xiàn)函數(shù)功能不需要使用對象屬性,但是需要類的時候就使用類方法

什么時候使用靜態(tài)方法:
實現(xiàn)函數(shù)功能不需要使用對象屬性也不需要類的時候就使用靜態(tài)方法

class Person:
    def __init__(self,name):
        self.name = name


    def eat(self,food):
        print('%schhi%s'% self.name,food)


    類方法
    @classmethod
    def destroy(cls):
        print(1)

   靜態(tài)方法
    @staticmethod
    def hit_animal():
        print('ren')


Person.destroy()
Person.hit_animal()

聲明一個數(shù)學類募强,屬性:pi 功能:求圓的面積,qiu 和

class Math:
    pi = math.pi
    @classmethod
    def area(cls,r):
        print(cls.pi*(r**2))

    @staticmethod
    def sum1(num1,num2):
        return num1+num2

Math.area(1)
print(Math.sum1(1,5))

03-私有化

1.私有化指的是

在類中可以通過在屬性名前或者方法名前加(注意:結(jié)尾不能加),那么這個屬性或者方法就會變成私有的。
私有的屬性和方法在類的外部不能使用

class Peerson:
    __num = 100#私有屬性
    def __init__(self):
        self.name = 45

    def show(self):
        print('名字',self.name)

2.私有化原理

Python中并沒有真正的私有化崇摄,不能從訪問權(quán)限上控制使用
只是在以_開頭的名字前加‘類名’擎值,導致不能通過原名訪問

04-對象屬性的getter和setter

如果希望在獲取對象屬性之前要做點別的事情,就給這個屬性添加getter
如果希望在給對象屬性賦值之前要做點別的事情配猫,就給這個屬性添加setter

2.給屬性添加getter

屬性命名的時候,屬性名前加_ ; self._age = 0
聲明一個函數(shù)杏死,函數(shù)名是屬性名(不要下劃線)泵肄,不需要參數(shù),要一個返回值淑翼,并且使用@property修飾腐巢。
這個函數(shù)的返回值就是獲取屬性的結(jié)果@property
def age(self):
return 年齡相關值
當需要獲取屬性的時候通過對象.不帶下劃線的屬性;如 :對象.age

3.給對象屬性添加setter

想要給對象屬性添加setter玄括,必須先給它添加getter
屬性命名的時候冯丙,屬性名前加_ ; self._age = 0
聲明一個函數(shù),函數(shù)名是屬性名(不要下劃線)遭京,需要一個額外參數(shù)胃惜;
使用函數(shù)前用@getter名.setter修飾
@age.setter
def age(self,value):
self._age = value

class Person:
    def __init__(self,name='li'):
        self.name = name
        self._age = 0
        self.set = 'nan'

    #  這兒的age屬性就是屬性_age的getter方法
    @property
    def age(self):
        if self._age < 1:
            return 'yiner'
        elif self._age < 18:
            return 'weichengnian'
        else:
            return 'chengnianren'


    @age.setter
    def age(self,value):
        if not isinstance(value,int):
            print('整數(shù)')
        if not (0<=value<=100):
            print('錯')
        self._age = value

p1 = Person()
# 這兒實質(zhì)是在調(diào)用_age的getter方法
print(p1.age)

# 這兒實質(zhì)是在調(diào)用_age的getter方法:p1.age(23)
p1.age = 23
class Time:
    def __init__(self):
        self._miao = 0

    @property
    def miao(self):
        return self._miao

    @miao.setter
    def miao(self,time):
        if int(time[0:2]) > 60 or int(time[-2:]) > 60:
            print('錯誤')
        else:
            t1 = int(time[0:2])*60 + int(time[-2:])
        self._miao = t1
    
       # 打印自己聲明的類的對象的時候,默認打印的是:<模塊名.類名 object at 對象地址>
       # 如果不希望這樣哪雕,可以使用__repr__方法船殉,打印對象的時候就會打印這個方法的返回值
         返回值必須是字符串
        
    def __repr__(self):
        return str(self.miao)


t1 = Time()
t1.miao = ('02:23')
print(t1.miao)
class Person:
    def __init__(self,name='li'):
        self.name = name
        self._age = 0
        self.set = 'nan'

    def  __repr__(self):
        return str(self.__dict__)[1:-1]

p1 = Person()
print(p1)

05-類的繼承

1.繼承

python中的類支持繼承,并且支持多繼承
默認情況下是繼承自object(object就是Python中類的基類)

什么是繼承:
一個類可以繼承另外一個類斯嚎,繼承者叫子類利虫,被繼承者叫父類挨厚。繼承就是讓子類直接擁有父類中的內(nèi)容

可以繼承哪些內(nèi)容
所有屬性和方法都可以繼承
slots對應的值不會被繼承

class Person:
    num1 = 100
    def __init__(self):
        self.name = '張三'
        self._age = 0
        self.sex = 'nan'

    def c(self):
        return 12

# Stu類繼承Person類
class Stu(Person):
    pass


# 學生對象
stu1 = Stu()
# 對象屬性,字段,對象方法都可以繼承
print(stu1.name,stu1.num1,stu1.c())

06-添加屬性和方法

子類除了有父類的屬性和方法外疫剃,還有自己的屬性和方法

1.在子類中添加方法

添加新的方法
直接在子類中聲明其他方法;添加后子類可以用自己和父類的方法,但是父類不能用子類的方法

重寫父類的方法:重新實現(xiàn)父類的方法
完全重寫 - 覆蓋父類的功能- 重新實現(xiàn)父類方法
部分重寫硼讽,保留父類功能巢价,添加新的功能 - 在子類中實現(xiàn)父類方法的時候通過super調(diào)用父類方法,
再添加新的方法
注意:可以在子類的方法中理郑,可以通過super調(diào)用父類的任何方法
super(類蹄溉,對象)- 獲取對象中父類的部分(要求對象是指定的類的對象)

類中方法的調(diào)用過程
通過類或者對象調(diào)用方法的時候,先看當前類中是否聲明過這個方法您炉,如果有就直接調(diào)用柒爵,
如果沒有就去找父類,如果父類中也沒有赚爵,再往上找棉胀,直到找到object,如果object中也沒有冀膝,就會報錯

注意:靜態(tài)方法中不能使用super()

class Person:
    num1 = 100
    def __init__(self):
        self.name = '張三'
        self._age = 0
        self.sex = 'nan'

    def show_message(self):
        print(self.name,'你好啊')

class Students(Person):
    def study(self):
        print('xuexi')

    #     保留父類功能唁奢,
    def show_message(self):
        super().show_message()
        print('我要去學校')

1.添加字段

直接添加新的字段

2.添加對象屬性

類的對象屬性是繼承父類的init方法繼承下來的

如果想要保留父類的屬性并添加新的屬性,
需要在子類的init方法中通過super()去調(diào)用父類的init方法

class Person:
    num1 = 100
    def __init__(self):
        self.name = '張三'
        self.age = 0
        self.sex = 'nan'


class Stu(Person):
    number = 152
    def __init__(self):
        super().__init__()
        self.stu_id = '101'

stu1 = Stu()
print(stu1.name)

動物類窝剖。屬性:年齡麻掸,顏色,類型赐纱,創(chuàng)建對象的時候類型和顏色必須賦值
貓類脊奋,屬性:年齡,顏色疙描,類型诚隙,愛好,創(chuàng)建對象時顏色必須賦值起胰,類型不能賦值

class Animal:
    def __init__(self,color,type,age=0):
        self.color = color
        self.type = type
        self.age = age

class Cat(Animal):
    def __init__(self,color,hobby='',age=0):#數(shù)量=父類屬性數(shù)量+自己屬性
        super().__init__(color,'cat',age)
        # self.type = 'cat'
        self.hobby = hobby

c1 = Cat(5)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末久又,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子效五,更是在濱河造成了極大的恐慌地消,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畏妖,死亡現(xiàn)場離奇詭異犯建,居然都是意外死亡,警方通過查閱死者的電腦和手機瓜客,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門适瓦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竿开,“玉大人,你說我怎么就攤上這事玻熙》癫剩” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵嗦随,是天一觀的道長列荔。 經(jīng)常有香客問我,道長枚尼,這世上最難降的妖魔是什么贴浙? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮署恍,結(jié)果婚禮上崎溃,老公的妹妹穿的比我還像新娘。我一直安慰自己盯质,他們只是感情好袁串,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呼巷,像睡著了一般囱修。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上王悍,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天破镰,我揣著相機與錄音,去河邊找鬼压储。 笑死鲜漩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的渠脉。 我是一名探鬼主播宇整,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瓶佳,長吁一口氣:“原來是場噩夢啊……” “哼芋膘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起霸饲,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤为朋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厚脉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體习寸,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年傻工,在試婚紗的時候發(fā)現(xiàn)自己被綠了霞溪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孵滞。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸯匹,靈堂內(nèi)的尸體忽然破棺而出坊饶,到底是詐尸還是另有隱情,我是刑警寧澤殴蓬,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布匿级,位于F島的核電站,受9級特大地震影響染厅,放射性物質(zhì)發(fā)生泄漏痘绎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一肖粮、第九天 我趴在偏房一處隱蔽的房頂上張望孤页。 院中可真熱鬧,春花似錦尿赚、人聲如沸散庶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悲龟。三九已至,卻和暖如春冰寻,著一層夾襖步出監(jiān)牢的瞬間须教,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工斩芭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留轻腺,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓划乖,卻偏偏與公主長得像贬养,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子琴庵,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容