Day13 面向?qū)ο蠡A2

01.內(nèi)置類屬性

02.私有化

03.getter 和 setter

04.練習

05.類的繼承


01.內(nèi)置類屬性

內(nèi)置類屬性:python中每個類都擁有內(nèi)置的類屬性
__name__
__doc__
__dict__
__module__
__bases__
'''
class Animal:
'''動物類'''
pass

class Cat(Animal):
'''說明文檔:貓類'''
number = 0

def __init__(self,name='',color=''):
    self.name = name
    self.color = color

def run(self):
    print('%s在跑' % self.name)

@staticmethod
def shout():
    print('喵')

@classmethod
def get_number(cls):
    print('貓的數(shù)量:%d' % cls.number)



cat1 = Cat('小花','white')
'''
1.類.__name__
獲取類的名字(字符串)
'''
print(Cat.__name__)

'''
2.類.__doc__
獲取類的說明文檔
'''
print(Cat.__doc__)
print(list.__doc__)

'''
3.類.__dict__  獲取類中所有的類屬性的對應的值粱挡,以鍵值對的形式存到字典里面
  對象.__dict__  將對象的屬性及對應的值轉(zhuǎn)換成字典的元素(常用,記住)
'''
print(Cat.__dict__)
print(cat1.__dict__)

'''
4.類.__module__  獲取當前類所在的模塊的名字
'''
print(Cat.__module__)

'''
5.類.__bass__  獲取當前類的父類
'''
print(Cat.__bases__)

image.png

02.私有化

python中類中的屬性和方法的私有化:直接在屬性名或者方法名前加__(命名以'__'開頭)
屬性或者方法私有:在外部不能直接使用,可以在類的內(nèi)部使用



class Person:
    '''人類'''
    def __init__(self,name='',age=0):
        self.name = name
        self.__age = age

    def show_age(self):
        print('%d' % (self.__age - 10))

if __name__ == '__main__':
    p1 = Person('張三',30)
    p1.name = '李四'
    p1.age = 10
    # print(p1.name,p1.__age)   報錯:'Person' object has no attribute '__age'
    p1.show_age()

03.getter 和 setter

'''
屬性假的私有化:聲明對象屬性的時候,在屬性名前面加'_',來告訴別人這個屬性不可以直接使用鹏秋。
               要通過getter和setter來獲取屬性的值和修改屬性的值

1.getter:獲取屬性的值
@property
def 屬性名(去掉下劃線)(self):
    return 返回值

如果在獲取對象的某個屬性前需要再干點別的事情伪嫁,就給屬性添加getter

2.setter:給屬性賦值
一個屬性必須要有g(shù)etter,才能添加setter

@屬性名(去掉下劃線).setter
def 屬性名去掉下劃線(self,變量名)
給帶下劃線的屬性賦值

如果在給對象的某個屬性賦值前前需要再干點別的事情藐吮,就給屬性添加setter
'''
class Student:
    '''學生類'''
    def __init__(self):
        # 聲明屬性的時候加'_'是為了告訴別人辞州,這個屬性不能直接使用
        self._name = ''
        self._score = 0
        self._age = 0
    # 給屬性_name添加getter
    @property
    def name(self):
        return self._name

    # 給屬性_name添加setter
    @name.setter
    def name(self,value):
        self._name = value

    @property
    def score(self):
        return self._score

    @score.setter
    def score(self,score):
        self._score = score

    @property
    def age(self):
        return str(self._age) + '歲'

    @age.setter
    def age(self,age):
        if age >= 150 or age < 0:
            print('賦值有誤!')
            self._age = None
            return
        self._age = age

if __name__ == '__main__':
    stu1 = Student()
    # 不添加getter和sett
    # stu1._name = '張三'
    # print(stu1._name)

    # 添加gett和setter
    stu1.name = '李四'
    print(stu1.name)

    stu1.score = '90'
    print(stu1.score)

    stu1.age = 110
    print(stu1.age)

04.練習

import json

def download_data():
    with open('./data.json','r',encoding='utf-8')as f:
        content = json.load(f)
        return content['data']

class Data:
    '''數(shù)據(jù)類'''
    def __init__(self):
        self.type = ''
        self.text = ''
        self.user_id = ''
        self.name = ''
        self.screen_name = ''
        self._width = 0
        self._height = 0
        self._themes = None

    @property
    def width(self):
        return self._width
    @width.setter
    def width(self,width):
        self._width = int(width)

    @property
    def height(self):
        return self._height
    @height.setter
    def height(self,height):
        self._height = int(height)

    @property
    def themes(self):
        if not self._themes:
            return '無'
        return self._themes

    # 根據(jù)字典創(chuàng)建對象
    @classmethod
    def creat_data(cls,dict1):
        data = cls()
        for key in dict1:
            # 特殊情況處理
            if key == 'width':
                data.width = dict1[key]
                continue
            if key == 'height':
                data.height = dict1[key]
                continue
            if key == 'themes':
                data._themes = dict1[key]
                continue
            data.__setattr__(key,dict1[key])

        return data

if __name__ == '__main__':
    print(download_data())
    datas = []
    for dict1 in download_data():
        # 通過字典創(chuàng)建對象
        data = Data.creat_data(dict1)
        #將創(chuàng)建的對象存起來
        datas.append(data)

    print(datas[0].text)

05.類的繼承

"""
父類(超類):被繼承者
子類:繼承者
1.怎么繼承
python中類是可以繼承的砸琅,并且支持多繼承

class 類名(父類):
    '''類的說明文檔'''
    屬性
    方法

說明:python中所有的類默認繼承python的基類:object

2.能繼承哪些內(nèi)容
繼承:直接擁有父類的屬性和方法(集成后父類的屬性和方法還是存在的)
a.對象的屬性和方法宋距、類的字段和類方法、靜態(tài)方法都可以繼承(私有的繼承無意義---不能繼承)
b.__slots__的值不會被繼承
c.getter和setter會被繼承
"""

class Person:
    '''人類'''
    def __init__(self):
        self.name = ''
        self.age = 0
        self.sex = '男'
        self.__lenth = ''

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

    number = 61

    @classmethod
    def get_number(cls):
        print('人類數(shù)量:%d' % cls.number)

    @staticmethod
    def hurt_earth():
        print('人類在傷害地球')


class Student(Person):
    '''學生類'''
    pass




if __name__ == '__main__':
    stu = Student()
    stu.name = '小明'
    print(stu.name)

    stu.eat()

    print(Student.number)
    Student.get_number()
    Student.hurt_earth()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末症脂,一起剝皮案震驚了整個濱河市谚赎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诱篷,老刑警劉巖壶唤,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棕所,居然都是意外死亡闸盔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門琳省,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迎吵,“玉大人,你說我怎么就攤上這事针贬』鞣眩” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵坚踩,是天一觀的道長荡灾。 經(jīng)常有香客問我,道長瞬铸,這世上最難降的妖魔是什么批幌? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮嗓节,結(jié)果婚禮上荧缘,老公的妹妹穿的比我還像新娘。我一直安慰自己拦宣,他們只是感情好截粗,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸵隧,像睡著了一般绸罗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豆瘫,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天珊蟀,我揣著相機與錄音,去河邊找鬼外驱。 笑死育灸,一個胖子當著我的面吹牛腻窒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播磅崭,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼儿子,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了砸喻?” 一聲冷哼從身側(cè)響起柔逼,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恩够,沒想到半個月后卒落,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蜂桶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年儡毕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扑媚。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡腰湾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疆股,到底是詐尸還是另有隱情费坊,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布旬痹,位于F島的核電站附井,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏两残。R本人自食惡果不足惜永毅,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望人弓。 院中可真熱鬧沼死,春花似錦、人聲如沸崔赌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽健芭。三九已至县钥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慈迈,已是汗流浹背若贮。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兜看。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像狭瞎,于是被迫代替她去往敵國和親细移。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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