python類和對象

"""author = 陳俊龍"""

============類方法和靜態(tài)方法===========

1.類中的方法:

1)對象方法

a.怎么聲明:直接聲明在類中的函數(shù)
b.怎么調(diào)用:通過對象來調(diào)用
c.特點(diǎn):有個指向當(dāng)前對象的默認(rèn)參數(shù)self撬即,調(diào)用的時候不需要傳參
d.什么時候用:實(shí)現(xiàn)函數(shù)的功能需要用到對象屬性的時候

2)類方法

a.怎么聲明:在聲明函數(shù)前加 @classmethod
b.怎么調(diào)用:通過類來調(diào)用 通過 !類.方法名()唱歧!
c.特點(diǎn):有個默認(rèn)參數(shù)cls粒竖,通過類調(diào)用時不需要傳參,指向的是當(dāng)前調(diào)用它的類沿后, 類能做的事情朽砰,cls都能做
d.什么時候用:屬性函數(shù)的功能,首先在不需要對象屬性的前題下漆弄,需要類的字段(需要類)的時候

3)靜態(tài)方法

a.怎么聲明:在聲明函數(shù)前加@staticmethod
b.怎么調(diào)用:通過 造锅!類.方法名()哥蔚! 來調(diào)用
c.特點(diǎn):沒有默認(rèn)參數(shù)
d.什么時候用:實(shí)現(xiàn)函數(shù)功能既不需要對象屬性,也不需要類的字段的時候

class Student:
    num = 30

    def __init__(self, name, age, tel, study_id):
        self.name = name
        self.age = age
        self.tel = tel
        self.study_id = study_id

    # 對象方法:
    def study(self):
        print('%s在學(xué)習(xí)' % self.name)

    # 類方法:
    @classmethod
    def count(cls):
        print('類方法1')
        stu = cls('小花', 12, '123', 222)
        print(stu)

    # 靜態(tài)方法:
    @staticmethod
    def sta_func():
        print('靜態(tài)方法')


Student.count()  # 類方法1
Student.sta_func()  # 靜態(tài)方法

================私有化=================

1.訪問權(quán)限:

公開(public):

屬性和方法在類的內(nèi)部可以使用渤愁,可以被繼承深夯,也可以在類的外部使用

保護(hù)(protect):

屬性和方法在類的內(nèi)部可以使用,可以被繼承他挎,不可以在類的外部使用

私有(private):

屬性和方法在類的內(nèi)部可以使用办桨,不可以被繼承站辉,不可以在類的外部使用

注意:python本質(zhì)上所以的屬性和方法都是公開的,私有化是殊霞!假的私有化汰蓉!

原理:只是單純的在私有屬性或方法前加 類名,導(dǎo)致直接使用原名使用不了祝钢,所以通過在最前面加一個下劃線類名其實(shí)也可以訪問

2.私有化:

語法:在聲明屬性或方法的時候若厚,在屬性名或方法名!前!加兩個下劃線_ _



class Person:
    num = 80

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def __eat(self, food):
        print('%s在吃%s' % (self.name, food))

    @classmethod
    def show_num(cls):
        print('人類的數(shù)量是:%s' % cls.num)


p1 = Person('小明', 12, '男')
print(Person.num)
Person.show_num()

print(Person.__dict__)
# 通過_類名__對象方法還是可以訪問
p1._Person__eat('面包')

==============getter和setter=============

1.什么時候使用getter和setter:

1)getter: - 希望在獲取一個屬性的值之前做一點(diǎn)別的事情

2)setter: - 希望在給屬性的值賦新值之前做一點(diǎn)別的事情

2.如何添加getter和setter:

1)如何添加getter

a.在需要添加的屬性前加一個下劃線_
b.@property后面聲明一個函數(shù)测秸,函數(shù)名和不帶下劃線_的屬性名一致,并且函數(shù)需要一個返回值表示獲取屬性的值
c.在外面通過不帶下劃線的 對象.屬性名 去獲取對應(yīng)的值

2)如何添加setter:

a.如果想要給屬性添加setter必須先給他添加getter
b.@getter名.steter后面聲明函數(shù)霎冯,函數(shù)名和去掉下劃線的屬性名一致,這個函數(shù)不需要返回值锚贱,但需要一個參數(shù)

添加getter和setter的實(shí)例:

class Person:
    num = 80

    def __init__(self, name, age, gender):
        self.name = name
        self._age = age
        self._gender = gender

    def __eat(self, food):
        print('%s在吃%s' % (self.name, food))
    # 添加getter
    @property
    def gender(self):
        if self._gender == 1:
            return '男'
        else:
            return '女'

    @property
    def age(self):
        return self._age
    # 添加setter
    @age.setter
    def age(self, value):
        if type(value) != int:
            print('數(shù)據(jù)有誤')
        if 0 < value <= 200:
            self._age = value  # 注意這里如何真正的賦值
        else:
            print('年齡超范圍')


p1 = Person('小明', 18, 1)
p1.age = 100

print(p1.gender)

print(p1.age)
class Rect:
    def __init__(self, width, length):
        self.width = width
        self.length = length
        self._area = 0
        self._perimeter = 0

    # 添加getter
    @property
    def area(self):
        return self.length*self.width

    @property
    def perimeter(self):
        return (self.width+self.length)*2

    @perimeter.setter
    def perimeter(self, value):  # 注意這里還是要給一個變量來接收拧廊,但可以不操作
        print(value)
        print('該屬性是只讀的')

r1 = Rect(4, 6)
# r1.area = 10 # AttributeError: can't set attribute  只添加getter而不添加setter將無法給這個值賦值
print(r1.area)



print(r1.perimeter)
r1.perimeter = 100   # 該屬性是只讀的  (賦值的時候晋修,其實(shí)是在調(diào)用剛才自己寫的那個函數(shù))

====================繼承===============

1.什么是繼承:

讓子類直接擁有父類的屬性和方法

2.怎么繼承:

注意:python中所以的類,默認(rèn)都是繼承自object這個基類

語法:

class 類名(父類1倦春,父類2,.....)
類的內(nèi)容

繼承發(fā)生后尿庐,子類直接擁有了父類所以的屬性和方法 D匮摺!唯一的例外是slots魔法皮假,只會約束當(dāng)前類骂维,不會影響子類

3.子類添加內(nèi)容:

1)添加字段和方法:

直接在子類中添加新的字段或方法

2)添加對象屬性:

在子類的init函數(shù)中加入 super()._ init _() 航闺,就可以做到繼承父類的對象屬性,同時子類的屬性還是有汰扭,

關(guān)鍵是前面的 super().函數(shù)名() 這個東西 這個公式是通用的福铅,!但對靜態(tài)方法無效笆包!

如果在創(chuàng)建子類對象的時候略荡,父類還需要傳入?yún)?shù)時,可以在 super.函數(shù)名 (父類的參數(shù))的括號里面?zhèn)鬟f這些父類需要的參數(shù)
巴粪!想到如果你想在子類創(chuàng)建時一起把父類的參數(shù)也輸入應(yīng)該怎么做粥谬!

類中的函數(shù)的調(diào)用順序:

是先看當(dāng)前類中有沒有這個方法漏策,如果沒有,就往上找父類芭届,如果再沒有,又繼續(xù)往上找褂乍,以此類推逃片,直到找到基類
如果基類都沒有才會報錯

class Person:
    num = 61

    def __init__(self, name='張三', age=0, gender='男'):
        self.name = name
        self.age = age
        self.gender = gender

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


class Student(Person):
    pre = 'stu'

    def __init__(self):
        # 在這里調(diào)用父類的init方法
        super().__init__()
        self.study_id = '001'
        self.score = 0

    def study(self):
        print('%s正在學(xué)習(xí)' % self.name)

1.子類可以繼承父類的屬性和方法實(shí)例

stu1 = Student()
stu1.eat('面包')
print(stu1.name)

2.子類可以使用父類的內(nèi)容题诵,但父類不能使用子類的

stu1.study()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末层皱,一起剝皮案震驚了整個濱河市叫胖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瓮增,老刑警劉巖绷跑,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砸捏,死亡現(xiàn)場離奇詭異,居然都是意外死亡垦藏,警方通過查閱死者的電腦和手機(jī)掂骏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門弟灼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人田绑,你說我怎么就攤上這事辛馆』硌樱” “怎么了腊状?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵缴挖,是天一觀的道長。 經(jīng)常有香客問我苟鸯,道長棚点,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任砌梆,我火速辦了婚禮咸包,結(jié)果婚禮上杖虾,老公的妹妹穿的比我還像新娘。我一直安慰自己忱反,他們只是感情好滤愕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布间影。 她就那樣靜靜地躺著,像睡著了一般巩割。 火紅的嫁衣襯著肌膚如雪付燥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天闻丑,我揣著相機(jī)與錄音,去河邊找鬼勋锤。 笑死侥祭,一個胖子當(dāng)著我的面吹牛矮冬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吆录,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼硝拧,長吁一口氣:“原來是場噩夢啊……” “哼障陶!你這毒婦竟也來了聊训?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鼓寺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勋磕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妈候,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年挂滓,在試婚紗的時候發(fā)現(xiàn)自己被綠了苦银。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡赶站,死狀恐怖幔虏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贝椿,我是刑警寧澤想括,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布烙博,位于F島的核電站瑟蜈,受9級特大地震影響烟逊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踪栋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一焙格、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夷都,春花似錦眷唉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至党饮,卻和暖如春肝陪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刑顺。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工氯窍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹲堂。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓狼讨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柒竞。 傳聞我的和親對象是個殘疾皇子政供,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章朽基,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,737評論 2 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,090評論 1 32
  • 面向?qū)ο缶幊蹋∣OP) 在前面的章節(jié)中稼虎,我們學(xué)習(xí)了Kotlin的語言基礎(chǔ)知識衅檀、類型系統(tǒng)、集合類以及泛型相關(guān)的知識霎俩。...
    Tenderness4閱讀 4,425評論 1 6
  • 可支持印刷的色彩模式有CMYK 模式茸苇、灰度模式排苍、位圖模式和雙色調(diào)模式。要提高印刷品的質(zhì)量学密,掌握每種色彩模式的特點(diǎn)是...
    視覺工坊閱讀 841評論 0 0
  • 1淘衙、茫茫人海 我為你寫詩 留下點(diǎn)贊可好 2、百年難遇 我為你唱歌 一起相守到老 3腻暮、情義永恒 ...
    我愛吃任何魚閱讀 225評論 0 2