Python中類稚新、對(duì)象和繼承相關(guān)知識(shí)

定義類并創(chuàng)建對(duì)象

在Python中定義類的寫法為:class 類名:即可定義出一個(gè)類(注意:類名首字母大寫)

由類創(chuàng)建對(duì)象的寫法為變量名 = 類名()

Python中的屬性

Python中的屬性可分為兩類:

1.類屬性:由類來維護(hù)的屬性及舍,對(duì)象在訪問這種屬性時(shí)哆档,訪問的是同一個(gè)值(即砌左,對(duì)象的共有財(cái)產(chǎn))

2.實(shí)例屬性:通過類創(chuàng)建出來的對(duì)象擁有,每個(gè)對(duì)象都維護(hù)自己獨(dú)有的屬性

可以將類屬性理解為公有屬性悦施,實(shí)例屬性理解為私有屬性

類屬性寫法:直接在類中添加屬性名和屬性值

class Student:
    country = 'china' # 類屬性
stu1 = Student()

實(shí)例屬性寫法:實(shí)例屬性定義在__init__函數(shù)里面并扇,且該函數(shù)接收的第一個(gè)參數(shù)(一般寫為self)是指針類型且永遠(yuǎn)指向該類創(chuàng)建出來的某個(gè)對(duì)象(即,通過類創(chuàng)建對(duì)象的時(shí)候抡诞,指針指向就確定了),函數(shù)接收的其它參數(shù)為創(chuàng)建對(duì)象時(shí)所需的形參

class Student:
    country = 'china'
    def __init__(self, name, age):
        self._name = name # 實(shí)例屬性_name
        self._age = age # 實(shí)例屬性_age
stu1 = Student('李四', '18')

__init__函數(shù)在調(diào)用類創(chuàng)建對(duì)象過程中會(huì)自行調(diào)用執(zhí)行土陪,不需要手動(dòng)調(diào)用__init__函數(shù)

Python中的方法

Python中的方法可分為三類:

1.類方法:屬于類的方法昼汗,由類來維護(hù)(對(duì)象的公有財(cái)產(chǎn))

2.實(shí)例方法:屬于對(duì)象的方法,由對(duì)象自己維護(hù)的方法(對(duì)象的私有財(cái)產(chǎn))

3.靜態(tài)方法:函數(shù)占據(jù)了類的命名空間鬼雀,調(diào)用時(shí)需要通過類名+方法名才能調(diào)用顷窒。靜態(tài)方法和通過該方法創(chuàng)建出來的對(duì)象沒有任何關(guān)系

可以將類方法理解為公有方法,實(shí)例方法為私有方法

只有是沒有調(diào)用過類、對(duì)象下的屬性鞋吉,就可以聲明為靜態(tài)方法

類方法的寫法:通過系統(tǒng)裝飾器@classmethod聲明函數(shù)為類方法鸦做,且該函數(shù)接收的第一個(gè)參數(shù)(一般寫為cls)是指針類型,指向的是類本身谓着,類方法只能訪問類屬性泼诱,不能訪問實(shí)例屬性。函數(shù)接收的其它參數(shù)為創(chuàng)建對(duì)象時(shí)所需的形參

    @classmethod
    def say(cls):
        print('我來自:' + cls.country)
        
        # print('我來自:' + cls._age)
        # 報(bào)錯(cuò):AttributeError: type object 'Student' has no attribute '_age'
        
stu1.say() # 我來自:china

實(shí)例方法的寫法:直接在類里添加函數(shù)赊锚,不需要裝飾器修飾治筒,其它寫法和類方法一樣,第一個(gè)參數(shù)一般寫為self用以區(qū)分舷蒲。實(shí)例方法既訪問類屬性耸袜,也能訪問實(shí)例屬性

    def hello(self):
        print('我的祖國是:' + self.country)
        print('我叫:' + self._name)

stu1.hello() # 我的祖國是:china    我叫:李四

靜態(tài)方法的寫法:通過系統(tǒng)裝飾器@staticmethod聲明函數(shù)為類方法

    @staticmethod
    def soy():
        print('我是打醬油的')
        
Student.soy() # 我是打醬油的

創(chuàng)建一個(gè)簡(jiǎn)單的類

class Student:
    country = 'china'
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @classmethod
    def say(cls):
        print('我來自:' + cls.country)

    def hello(self):
        print('我的祖國是:' + self.country)
        print('我叫:' + self._name)

    @staticmethod
    def soy():
        print('我是打醬油的')

stu1 = Student('李四', '18')
stu1.say()
stu1.hello()
Student.soy()

特性:property

特性作用及寫法

作用:如果調(diào)用特性,則用戶只能訪問牲平,不能設(shè)置堤框;隱藏真實(shí)的實(shí)例屬性,防止用戶亂更改或誤操作

寫法:通過系統(tǒng)裝飾器@property聲明函數(shù)

class Circle:
    def __init__(self, r):
        self._r = r
        
    @property
    def r(self):
        return self._r

cir = Circle(10);
print(cir.r)

設(shè)置器作用及用法

作用:專門提供給特性使用纵柿,用來修改特性的值

寫法:通過系統(tǒng)裝飾器@特性名.setter聲明函數(shù)

    @r.setter
    def r(self, num):
        if type(num) is int:
            self._r = num
        else:
            print('請(qǐng)?jiān)O(shè)置整數(shù)值')
            
cir.r = 20

刪除器作用及寫法

作用:通過del刪除某個(gè)特性時(shí)胰锌,如果定義了刪除器,該操作會(huì)執(zhí)行刪除其中的代碼

寫法:通過系統(tǒng)裝飾器@特性名.deleter聲明函數(shù)

    @r.deleter
    def r(self):
        print('can not delete')
        
del cir.r # 不加刪除器會(huì)報(bào)錯(cuò):AttributeError: can't delete attribute

屬性私有化

讓當(dāng)前類的私有屬性不會(huì)被子類繼承到

Python中私有化機(jī)制:是屬性名改寫藐窄。在所有需要私有化的屬性前添加__资昧,則該屬性名就會(huì)變成:_類名__屬性名

class Student:
    def __init__(self):
        self.__name = '張三'

    def say(self):
        print('hello,我是' + self.__name)

stu = Student()
stu.say();
print(stu._Student__name)
# print(stu.name) 報(bào)錯(cuò):AttributeError: 'Student' object has no attribute 'name'

繼承

聲明繼承關(guān)系:在子類名后跟小括號(hào),小括號(hào)里是要繼承的父類名

注意:

1.在繼承父類實(shí)例屬性時(shí)荆忍,要先手動(dòng)調(diào)用父類的init函數(shù)

繼承關(guān)系中的init方法的執(zhí)行邏輯:在子類沒有實(shí)現(xiàn)init方法時(shí)格带,會(huì)觸發(fā)父類中的init執(zhí)行;如果子類實(shí)現(xiàn)了init刹枉,不會(huì)觸發(fā)父類的init執(zhí)行

2.在子類復(fù)寫父類時(shí)叽唱,要先手動(dòng)調(diào)用父類相應(yīng)的方法

class A:
    def __init__(self):
        self.name = 'zhangsan'
        print('我是父類的init')
    def say(self):
        print('我是父類')
# 聲明繼承關(guān)系:在子類名后跟小括號(hào),小括號(hào)里是要繼承的父類名
class B(A):
    def __init__(self):
        # 手動(dòng)調(diào)用父類的init函數(shù)
        A.__init__(self)
        print('我是子類的init')
    def bSay(self):
        print('我是子類')
        
    # 在子類中復(fù)寫父類
    def say(self):
        A.say(self)
        print('我是復(fù)寫的新數(shù)據(jù)')

b = B()
print(b.name)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末微宝,一起剝皮案震驚了整個(gè)濱河市棺亭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蟋软,老刑警劉巖镶摘,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異岳守,居然都是意外死亡凄敢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門湿痢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涝缝,“玉大人,你說我怎么就攤上這事【艽” “怎么了罐氨?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滩援。 經(jīng)常有香客問我栅隐,道長(zhǎng),這世上最難降的妖魔是什么狠怨? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任约啊,我火速辦了婚禮,結(jié)果婚禮上佣赖,老公的妹妹穿的比我還像新娘恰矩。我一直安慰自己,他們只是感情好憎蛤,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布外傅。 她就那樣靜靜地躺著,像睡著了一般俩檬。 火紅的嫁衣襯著肌膚如雪萎胰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天棚辽,我揣著相機(jī)與錄音技竟,去河邊找鬼。 笑死屈藐,一個(gè)胖子當(dāng)著我的面吹牛榔组,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播联逻,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼搓扯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了包归?” 一聲冷哼從身側(cè)響起锨推,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎公壤,沒想到半個(gè)月后换可,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡境钟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年锦担,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慨削。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缚态,到底是詐尸還是另有隱情磁椒,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布玫芦,位于F島的核電站浆熔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桥帆。R本人自食惡果不足惜医增,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望老虫。 院中可真熱鬧叶骨,春花似錦、人聲如沸祈匙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夺欲。三九已至跪帝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間些阅,已是汗流浹背伞剑。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留市埋,地道東北人黎泣。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像腰素,于是被迫代替她去往敵國和親聘裁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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