day15-總結(jié)

面向?qū)ο?/h2>

一、內(nèi)置內(nèi)屬性

1.什么是內(nèi)置內(nèi)屬性
聲明類的時(shí)候系統(tǒng)自動(dòng)添加的屬性(可能是字段也可能是字段屬性)

class Person:
    """
    說(shuō)明文檔:人類
    num :人的數(shù)量
    """
    num = 61
    # 注意:如果設(shè)置了__slots__的值教硫,那么當(dāng)前類的隨想就不能使用__dict__屬性

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

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

    # 定制當(dāng)前類的對(duì)象的打印方式
    # 1)重寫__str__方法

    def __str__(self):
        return '<' + str(self.__dict__)[1:-1] + '>'

    # 2)重寫__repr__方法

    def __repr__(self):
        return '<' + str(self.__dict__)[1:-1] + '>'

p1 = Person('小明', '男', 18
# 1.__name__
"""
類的字段;類名.__name__ - 獲取類的名字(字符串)
"""
# print(type(Person), Person)
# print(Person.__name__)

# 2.__doc__
"""
類的字段形纺;類.__doc__ - 獲取類的說(shuō)明文檔
"""
print(Person.__doc__)

# 3.__class__
"""
對(duì)象屬性;對(duì)象.__class__ - 獲取對(duì)象對(duì)應(yīng)的類徒欣,返回的是類
          (和type(對(duì)象)功能一樣)
"""
print(p1.__class__)
print(type(p1))
type1 = p1.__class__
print(type.__name__)
p2 = type1('小花', 'nv', 13)

# 4.__dict__(將對(duì)象轉(zhuǎn)換成字典)
"""
對(duì)象屬性逐样;對(duì)象.__dict__ - 將對(duì)象中所有的屬性和對(duì)應(yīng)的值轉(zhuǎn)換成一個(gè)字典中的鍵值對(duì)(一個(gè)對(duì)象就是一個(gè)字典)
類的字段;類.__dict__ - 將類轉(zhuǎn)換成一個(gè)字典打肝,字典中所有的元素是類中的字段和對(duì)應(yīng)的值
"""
# print(p1.__dict__)  # {'name': '小明', 'gender': '男', 'age': 18}
# print(Person.__dict__)
print(p1)
persons = [p1, p2]
print(persons)

# 5.__module__
"""
類的字段官研;類.__module__  - 獲取當(dāng)前類是在哪個(gè)模塊中聲明的(返回的是模塊的名字)
"""
print(Person.__module__)
print(bool.__module__)

# 6.__bases__
"""
類的字段; 類.__bases__ - 獲取當(dāng)前類的父類(返回的是一個(gè)元組)
"""

二闯睹、私有化

1.訪問(wèn)權(quán)限:公開(kāi)戏羽、保護(hù)、私有
公開(kāi) - 公開(kāi)的屬性和方法在類的內(nèi)部楼吃、外部能夠使用始花,也能被繼承
保護(hù) - 保護(hù)的屬性和方法只能在類的內(nèi)部使用,外部不能使用孩锡,可以被繼承
私有 - 私有的屬性和方法只能在類的內(nèi)部使用酷宵,外部不能使用,也不能被繼承
2.python中屬性和方法的訪問(wèn)權(quán)限
python類中所有的屬性和方法本質(zhì)都是公開(kāi)的躬窜;
私有化是假的私有化浇垦,只是提示程序員這個(gè)屬性或方法不能在外部使用,也不能被繼承

怎么私有化荣挨;在需要私有化的屬性名或者方法名前加‘__’(不能以‘__’結(jié)尾)
python私有化的原理:在私有的屬性和方法前加了‘_類名’

class Person:
    __num = 61

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

    def eat(self, food='米飯'):
        print('%s在吃%s' % (self.name, food))
        print('內(nèi)部', Person.__num)


p1 = Person('小明', 20)
# print(Person.num, p1.name, p1.name)
p1.eat()
# print(Person.__num)  # AttributeError: type object 'Person' has no attribute '__num'

print(p1.__dict__)  # {'name': 'xiaoming', '_Person__age': 20}
# print(p1._Person__age)


print(list('abcdef'))

三男韧、屬性的getter和setter

1.什么是getter和setter
當(dāng)我們需要獲取屬性值之前做點(diǎn)別的事情就需要給這個(gè)屬性添加getter;
當(dāng)需要給屬性賦值之前做點(diǎn)別的事情默垄,就需要?jiǎng)t這個(gè)屬性添加setter
2.給屬性添加getter
1)屬性命名的時(shí)候前面加‘_’
2)在裝飾器@property的后面聲明一個(gè)對(duì)象方法
a.將屬性去掉下劃線作為方法名
b.方法處理self以外不需要其他參數(shù)
c.函數(shù)的返回值就是獲取這個(gè)屬性的時(shí)候得到的值
3)在外部使用屬性的時(shí)候此虑,通過(guò)‘對(duì)象.不帶下劃線的屬性’去使用

注意:獲取屬性值時(shí),就會(huì)自動(dòng)去調(diào)用getter對(duì)應(yīng)的函數(shù)
3.給屬性添加setter
屬性添加setter之前必須先添加getter
1)保證屬性名前有‘_’
2)在@getter名.setter后面聲明對(duì)象方法
a.降屬性去電下劃線作為方法名
b.需要一個(gè)self以外的參數(shù)
c.不需要返回值
3)在外部使用屬性的時(shí)候口锭,通過(guò)‘對(duì)象.不帶下劃線的屬性’去使用

注意:當(dāng)屬性賦值的時(shí)候朦前,實(shí)質(zhì)是調(diào)用setter的方法


class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self._age = age
        self._gender = 0
        self._week = 0

    @property
    def week(self):
        if self._week == 0:
            return '星期天'
        elif self._week == 1:
            return '星期一'
        elif self._week == 2:
            return '星期二'
        elif self._week == 3:
            return '星期三'
        elif self._week == 4:
            return '星期四'
        elif self._week == 5:
            return '星期五'
        elif self._week == 6:
            return '星期六'

    @property
    def age(self):
        print('年齡被訪問(wèn)!>椴佟韭寸!')
        return self._age

    @age.setter
    def age(self, value):
        print('年齡值被修改')
        if not isinstance(value, int):
            raise ValueError
        if not 0 <= value <= 150:
            raise ValueError
        self._age = value

    @property
    def gender(self):
        if self._gender == 0:
            return '男'
        elif self._gender == 1:
            return '女'

    # @gender.setter
    # def gender(self, value):


p1 = Person('xiaoming', 18, 'nan')

print(p1.week)  # 這兒實(shí)質(zhì)是在調(diào)用week方法獲取返回值
print(p1.age)
p1.age = 23


# 練習(xí):寫一個(gè)矩形類
# 有屬性:長(zhǎng)、寬荆隘、面積恩伺、周長(zhǎng)


class Rect:

    def __init__(self, length, width):
        self._length = length
        self._width = width

    @property
    def length(self):
        return self._length

    @length.setter
    def length(self, value):
        if not isinstance(value, int):
            raise ValueError
        if value <= 0:
            raise ValueError
        self._length = value

    @property
    def width(self):
        return self._width

    @width.setter
    def width(self, value):
        if not (isinstance(value, int) or isinstance(value, float)):
            raise ValueError
        if value <= 0:
            raise ValueError
        self._width = value

    def area(self):
        return self._length * self._width

    def per(self):
        return 2*(self._length + self._width)


r1 = Rect(46, 12)

print(r1.length)
r1.length = 23
print(r1.area())
r1.area = 1
print()
print(r1.area)

四、類方法和靜態(tài)方法

類中的方法分為:對(duì)象方法臭胜、類方法和靜態(tài)方法
1)對(duì)象方法
a.怎么聲明:直接聲明
b.怎么調(diào)用:用對(duì)象來(lái)調(diào)用
c.特點(diǎn):有指向當(dāng)前對(duì)象的self
d.什么時(shí)候用:如果實(shí)現(xiàn)函數(shù)的功能需要使用對(duì)象屬性莫其,就使用對(duì)象方法

2)類方法
a.怎么聲明:聲明在@classmethod后面的方法
b.怎么調(diào)用:用類來(lái)調(diào)用癞尚,‘類.類方法’
c.特點(diǎn):有自帶參數(shù)cls耸三,表示當(dāng)前類乱陡,這個(gè)參數(shù)在調(diào)用的時(shí)候不用傳參,系統(tǒng)會(huì)自動(dòng)將當(dāng)前類傳給它
cls:誰(shuí)調(diào)用就指向誰(shuí)(如果是對(duì)象就指向?qū)ο髮?duì)應(yīng)的類)
d.什么時(shí)候用:如果實(shí)現(xiàn)函數(shù)的功能不需要對(duì)象屬性仪壮,但是需要類的字段憨颠,就使用類方法

3)靜態(tài)方法
a.怎么聲明:聲明在@staticmethod后面的
b.怎么調(diào)用:通過(guò)類來(lái)調(diào)用,‘類.靜態(tài)方法’
c.特點(diǎn):沒(méi)有默認(rèn)參數(shù)
d.什么時(shí)候用:實(shí)現(xiàn)函數(shù)的功能既不需要類积锅,也不需要對(duì)象爽彤,就使用靜態(tài)方法

class Person:
    num = 61

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

    def eat(self, food):
        # 對(duì)象能做的事情,self都能做
        print('%s吃%s' % (self.name, food))

    @classmethod
    def func1(cls):
        t = cls('a', 12, 'c')
        print('t', t)
        print('這是一個(gè)類方法缚陷!')

    @staticmethod
    def func2():
        print('這是一個(gè)靜態(tài)方法适篙!')

    @staticmethod
    def func3():
        print('這是個(gè)啥')


Person.func1()

p1 = Person('夏明', 90, '男')
Person.func2()

五、繼承

1.什么是繼承
繼承就是讓子類直接擁有父類全部屬性和方法
子類 - 繼承者
父類/超類 - 被繼承者
2.怎么繼承
1)語(yǔ)法
class 類名(父類1箫爷, 父類2嚷节, 父類3,……):
說(shuō)明文檔
類的內(nèi)容

2)說(shuō)明:
() - 固定寫法虎锚,如果省略相當(dāng)于(object)
聲明類的時(shí)候如果沒(méi)有寫父類硫痰,默認(rèn)繼承object,(object又稱基類)
父類 - 一個(gè)類的父類可以有一個(gè)窜护,也可以有多個(gè)效斑,單一般情況下只有一個(gè)(支持多繼承)


class Person:
    num = 61

    def __init__(self):
        self.name = '小明'
        self.age = 18
        self.gender = '男'

    def eat(self, food='米飯'):
        print('{}在吃{}'.format(self.name, food))

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


class Student(Person):
    # 在子類中添加對(duì)象屬性需要先通過(guò)super()去調(diào)用父類的__init__來(lái)繼承父類的對(duì)象屬性
    # 在子類中可以通過(guò)super()去調(diào)用父類的方法
    # 注意:super()只能在對(duì)象方法和類方法中去使用

    pass
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柱徙,隨后出現(xiàn)的幾起案子缓屠,更是在濱河造成了極大的恐慌,老刑警劉巖护侮,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藏研,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡概行,警方通過(guò)查閱死者的電腦和手機(jī)蠢挡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凳忙,“玉大人业踏,你說(shuō)我怎么就攤上這事〗眩” “怎么了勤家?”我有些...
    開(kāi)封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)柳恐。 經(jīng)常有香客問(wèn)我伐脖,道長(zhǎng)热幔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任讼庇,我火速辦了婚禮绎巨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蠕啄。我一直安慰自己场勤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布歼跟。 她就那樣靜靜地躺著和媳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哈街。 梳的紋絲不亂的頭發(fā)上留瞳,一...
    開(kāi)封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音骚秦,去河邊找鬼她倘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛骤竹,可吹牛的內(nèi)容都是我干的帝牡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蒙揣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼靶溜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起懒震,我...
    開(kāi)封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤罩息,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后个扰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瓷炮,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年递宅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娘香。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡办龄,死狀恐怖烘绽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俐填,我是刑警寧澤安接,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站英融,受9級(jí)特大地震影響盏檐,放射性物質(zhì)發(fā)生泄漏歇式。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一胡野、第九天 我趴在偏房一處隱蔽的房頂上張望材失。 院中可真熱鬧,春花似錦给涕、人聲如沸豺憔。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抄邀,卻和暖如春耘眨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背境肾。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工剔难, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奥喻。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓偶宫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親环鲤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纯趋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 內(nèi)置函數(shù)屬性 1.聲明是內(nèi)置類屬性 聲明類的時(shí)候系統(tǒng)自動(dòng)添加的屬性(可能是字段也可能是對(duì)象屬性) 定制當(dāng)前類的對(duì)象...
    舉顆鳳梨閱讀 259評(píng)論 0 4
  • 一,內(nèi)置屬性 1.什么是內(nèi)置類屬性 聲明類的時(shí)候系統(tǒng)自動(dòng)添加的屬性(可能是字段也可能是對(duì)象屬性) 1)name類的...
    oct___d38e9閱讀 159評(píng)論 0 0
  • 什么是類冷离,什么是對(duì)象類就是擁有相同功能相同屬性的對(duì)象的集合 抽象的概念對(duì)象是類的實(shí)例 類的聲明class 類名:...
    小逗比的奮斗史閱讀 139評(píng)論 0 0
  • 一吵冒、內(nèi)置類屬性 聲明類的時(shí)候系統(tǒng)自動(dòng)添加的屬性:字段、對(duì)象屬性西剥。 __dict__ -將對(duì)象轉(zhuǎn)換成字典 對(duì)象屬性...
    浩子_唯一號(hào)閱讀 220評(píng)論 0 1