day15----總結(jié) 面向?qū)ο?

day15--總結(jié) 面向?qū)ο?/h1>
  • 1.什么是內(nèi)置屬性

聲明類(lèi)的時(shí)候系統(tǒng)自動(dòng)添加的屬性(可能是字段也可能是對(duì)象屬性)

class Person:
    """
    說(shuō)明文檔: 人類(lèi)
    num - 人類(lèi)的數(shù)量
    name - 人的名字
    """
    num = 61

    # 注意: 如果設(shè)置了__slots__的值叠萍,那么當(dāng)前類(lèi)的對(duì)象就不能使用__dict__屬性
    # __slots__ = ('name', 'gender', 'age')

    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)前類(lèi)的對(duì)象的打印
#1)重寫(xiě)__str__方法,這個(gè)方法的返回值就是對(duì)應(yīng)的打印結(jié)果(類(lèi)型必須是字符串)
def __str__(self):
    return '姓名:{}中符,年齡:{},性別:{}'.format(self.name, self.age, self.gender)
    return '<'+str(self.__dict__)[1:-1]+'>'

#2)重寫(xiě)__repr__方法某宪,這個(gè)方法的返回值就是對(duì)應(yīng)的打印結(jié)果(類(lèi)型必須是字符串)

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

p1 = Person('小明', '男'跨跨,18)
  • 1.name

    類(lèi)的字段;類(lèi)名.name - 獲取類(lèi)的名字(是個(gè)字符串)
print(Person.__name__)    # Person
  • 2.doc

類(lèi)的字段疯特;類(lèi)名.__doc__    -  獲取類(lèi)的說(shuō)明文檔
print(Person.__doc__)    # 
  • 3.class

對(duì)象屬性;對(duì)象.__class__   -  獲取對(duì)象的類(lèi) (和 type(對(duì)象)  的功能一樣)
print(p1.__class__)   # <class '__main__.Person'>
print(type(p1))    # <class '__main__.Person'>
  • 4.dict - 將對(duì)象轉(zhuǎn)換成字典

對(duì)象屬性哗魂;對(duì)象.__dict__   --  將對(duì)象中所有的屬性以屬性和對(duì)應(yīng)的值轉(zhuǎn)換換成一個(gè)字典中的鍵值對(duì)(一個(gè)對(duì)象一個(gè)字典)
類(lèi)的字段;類(lèi).__dict__ -  將類(lèi)轉(zhuǎn)換成一個(gè)字典漓雅,字典中的元素是類(lèi)中所有的字段和對(duì)應(yīng)的值
注意:如果設(shè)置了__slots__的值录别,當(dāng)前類(lèi)的對(duì)象就不能使用__dict__屬性

print(p1.__dict__)    - #  {'name': '小明', 'gender': '男', 'age': 18}
  • 5.module

類(lèi)的字段;類(lèi).__module__  - 獲取當(dāng)前類(lèi)是在哪個(gè)模塊中聲明的邻吞,返回值是一個(gè)模塊名稱(chēng)
print(Person.__module__)  # __main__

  • 6.bases

類(lèi)的字段组题;類(lèi).__bases__  -   獲取當(dāng)前類(lèi)的父類(lèi)(返回的是一個(gè)元組)

print(Person.__bases__)    # (<class 'object'>,)

私有化

  • 1.訪(fǎng)問(wèn)權(quán)限:公開(kāi),保護(hù)抱冷,私有
公開(kāi):公開(kāi)的屬性和方法在類(lèi)的內(nèi)部崔列,外部都能用,可以被繼承
保護(hù):保護(hù)的屬性和方法在類(lèi)的類(lèi)部?jī)?nèi)用旺遮,外部不能用赵讯,能被繼承
私有:私有的屬性和方法在類(lèi)的內(nèi)部和外部都不能用,不能被繼承
  • 2.python中屬性和方法的訪(fǎng)問(wèn)權(quán)限
python中所有的屬性和方法都是公開(kāi)的

怎么私有化:在需要私有化的屬性或者方法名前加'__'(注意不能以'__'結(jié)尾)
python中私有化原理:在私有化的屬性和方法前加'_類(lèi)名'

屬性的getter 和setter

在我們需要在獲取屬性值之前做點(diǎn)別的事情耿眉,就需要給這個(gè)屬性添加getter

當(dāng)需要給屬性賦值之前做別的事情边翼,需要給這個(gè)屬性添加setter
  • 1.給屬性添加getter
1)屬性命名的時(shí)候前面添加'_'
2)在@property裝飾器的后面聲明一個(gè)對(duì)象方法
    a.將屬性去掉下劃線(xiàn)作為方法名
    b.方法除了self以外不需要其他參數(shù)
    c.函數(shù)的返回值就是獲取這個(gè)屬性的時(shí)候得到的值
3)在外部使用屬性的時(shí)候,通過(guò)'對(duì)象.屬性(不帶下劃線(xiàn))'去使用
注意:獲取屬性值得時(shí)候鸣剪,就會(huì)自動(dòng)調(diào)用getter對(duì)應(yīng)的方法
  • 2.屬性添加setter
屬性添加setter之前先添加getter(一般兩個(gè)一起用)
1)屬性名前加'_'
2)在@getter名.setter后面聲明對(duì)象
    a.將屬性下劃線(xiàn)去掉作為方法名
    b.需要一個(gè)self以外的參數(shù)
    c.不需要返回值
3)在外部使用屬性的時(shí)候组底,通過(guò)'對(duì)象.不帶下滑線(xiàn)的屬性'去使用

注意:當(dāng)給屬性賦值的時(shí)候,實(shí)質(zhì)上是調(diào)用setter對(duì)應(yīng)的方法
  • 練習(xí):寫(xiě)一個(gè)矩形類(lèi)
  • 有屬性:長(zhǎng)西傀,寬斤寇,面積,周長(zhǎng)
  • 要求從生活的角度去看這個(gè)矩形
class Rectangle:
    def __init__(self, long, width):
        self._long = long
        self._width = width
        self._area = 0
        self._perimeter = 0

    @property
    def long(self):
        return self._long

    @long.setter
    def long(self, value):
        if not(isinstance(value, int) or isinstance(value, float)):
            raise ValueError

        if value < 0:
            raise ValueError
        self._long = 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

    @property
    def area(self):
        self._area = self._width * self._long
        return self._area

    @area.setter
    def area(self, value):
        return ValueError

    @property
    def perimeter(self):
        self._perimeter = 2 * (self._width + self._long)
        return self._perimeter

    @perimeter.setter
    def perimeter(self, value):
        return ValueError


r1 = Rectangle(100, 300)
print(r1.perimeter)
print(r1.area)
r1.width = 200
print(r1.width, r1.perimeter, r1.area)
# r1.long = 'nnn'
print(r1.long)

類(lèi)方法和靜態(tài)方法

  • 1.類(lèi)中的方法
1)對(duì)象方法:(對(duì)象能做的的事拥褂,self都能做)
a.怎么申明:直接聲明
b.怎么調(diào)用:用對(duì)象調(diào)用  '對(duì)象.對(duì)象方法()'
c.特點(diǎn):有指向當(dāng)前對(duì)象的self
d.什么時(shí)候用:如果實(shí)現(xiàn)函數(shù)的功能需要用到對(duì)象屬性娘锁,就要選對(duì)象方法


2)類(lèi)方法:(類(lèi)能做的事 ,cls都能做)
a.怎么聲明:聲明在@classmathod后面
b.怎么調(diào)用:用類(lèi)來(lái)調(diào)用   '類(lèi).類(lèi)方法()'
c.特點(diǎn):有自帶參數(shù)cls饺鹃,表示當(dāng)前類(lèi)莫秆;這個(gè)參數(shù)在調(diào)用的時(shí)候不用傳參间雀,系統(tǒng)自動(dòng)將當(dāng)前類(lèi)傳給他;
cls:誰(shuí)調(diào)用就指向誰(shuí)(如果是對(duì)象就指向?qū)ο髮?duì)應(yīng)的類(lèi))
d.什么時(shí)候用:實(shí)現(xiàn)函數(shù)的功能不需要對(duì)象屬性但需要類(lèi)的字段镊屎,就要用類(lèi)方法


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

繼承

  • 1.什么是繼承
繼承就是讓子類(lèi)直接擁有父類(lèi)的屬性和方法
子類(lèi)   -  繼承者
父類(lèi)  -   被繼承著
  • 2.怎么繼承
1)語(yǔ)法:
class 類(lèi)名(父類(lèi)1, 父類(lèi)2缝驳,...):
    說(shuō)明文檔
    類(lèi)的內(nèi)容

2)說(shuō)明:
()   -  固定寫(xiě)法连锯,如果省略相當(dāng)于(object)
        聲明類(lèi)的時(shí)候如果沒(méi)有寫(xiě)父類(lèi),默認(rèn)繼承object(object又叫基類(lèi))

父類(lèi)   -   一個(gè)類(lèi)的父類(lèi)可以多個(gè)

在子類(lèi)中可以通過(guò)supper()去調(diào)用分類(lèi)的方法(只能在對(duì)象方法和類(lèi)方法中使用)
在子類(lèi)添加對(duì)象屬性用狱,先通過(guò)supper()調(diào)用父類(lèi)的__init__來(lái)繼承父類(lèi)的對(duì)象屬性
class Person:
    num = 61

    def __init__(self):
        print('Person中init')
        self.name = '小明'
        self.age = 18
        self.gender = '男'
        self.__a = 10

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

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

    @staticmethod
    def func1():
        print('人類(lèi)')

    def func2(self):
        print('我是'+self.name)


class Student(Person):
    num = 10

    def __init__(self):
        # 在子類(lèi)中添加對(duì)象屬性运怖,需要先通過(guò)super()去調(diào)用父類(lèi)的__init__來(lái)繼承父類(lèi)的對(duì)象屬性
        super().__init__()
        print('Student中init')
        self.study_id = '001'
        self.class1 = 'py1904'

    # 添加功能
    def study(self):
        print(self.name+'在好好學(xué)習(xí)!')

    @staticmethod
    def func1():
        print('學(xué)生')

    def func2(self):
        print('我是學(xué)生!')
        # 在子類(lèi)中可以通過(guò)super()可以去調(diào)用父類(lèi)的方法
        # 注意: super()只能在對(duì)象方法和類(lèi)方法中使用
        super().func2()


stu1 = Student()
print(Student.num)    # 10
print('===================')
print(stu1.name, stu1.age, stu1.gender)  # 小明 18 男
print('===================')
stu1.eat()                    # 小明在吃米飯
print('===================')
Student.show()               # 人類(lèi)的數(shù)量:10
print('===================')
print(stu1.__dict__)     # {'name': '小明', 'age': 18, 'gender': '男', '_Person__a': 10, 'study_id': '001', 'class1': 'py1904'}
print('===================')
Student.func1()          # 學(xué)生
print('===================')
stu1.func2()           # 我是學(xué)生!
                        # 我是小明
                        
                        
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市夏伊,隨后出現(xiàn)的幾起案子摇展,更是在濱河造成了極大的恐慌,老刑警劉巖溺忧,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咏连,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鲁森,警方通過(guò)查閱死者的電腦和手機(jī)祟滴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刀森,“玉大人踱启,你說(shuō)我怎么就攤上這事报账⊙械祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵透罢,是天一觀(guān)的道長(zhǎng)榜晦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)羽圃,這世上最難降的妖魔是什么乾胶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮朽寞,結(jié)果婚禮上识窿,老公的妹妹穿的比我還像新娘。我一直安慰自己脑融,他們只是感情好喻频,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著肘迎,像睡著了一般甥温。 火紅的嫁衣襯著肌膚如雪锻煌。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天姻蚓,我揣著相機(jī)與錄音宋梧,去河邊找鬼。 笑死狰挡,一個(gè)胖子當(dāng)著我的面吹牛捂龄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播加叁,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼跺讯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了殉农?” 一聲冷哼從身側(cè)響起刀脏,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎超凳,沒(méi)想到半個(gè)月后愈污,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轮傍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年暂雹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片创夜。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杭跪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驰吓,到底是詐尸還是另有隱情涧尿,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布檬贰,位于F島的核電站姑廉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏翁涤。R本人自食惡果不足惜桥言,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葵礼。 院中可真熱鬧号阿,春花似錦、人聲如沸鸳粉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赁严。三九已至扰柠,卻和暖如春粉铐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卤档。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工蝙泼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劝枣。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓汤踏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親舔腾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子溪胶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 私有化 .屬性和方法訪(fǎng)問(wèn)權(quán)限私有的:在類(lèi)的外部不可以被使用,稳诚,也不可以被繼承保護(hù)的:在類(lèi)的外部不可以被使用哗脖,也可以...
    ChiAo1fei閱讀 238評(píng)論 0 0
  • 內(nèi)置函數(shù)屬性 1.聲明是內(nèi)置類(lèi)屬性 聲明類(lèi)的時(shí)候系統(tǒng)自動(dòng)添加的屬性(可能是字段也可能是對(duì)象屬性) 定制當(dāng)前類(lèi)的對(duì)象...
    舉顆鳳梨閱讀 255評(píng)論 0 4
  • 一、面向?qū)ο缶庉?編程思想:1.面向過(guò)程編程 ---> 算法扳还,邏輯(數(shù)學(xué)邏輯) 2.函數(shù)式編程 ---> 函數(shù)才避,...
    大漠判官1閱讀 240評(píng)論 0 0
  • 一、屬性: 本質(zhì)上氨距,python中所有的屬性和方法都是公開(kāi)的桑逝,在類(lèi)的外部可以使用也可以被繼承 1.私有化 讓屬性和...
    墨2019418閱讀 276評(píng)論 0 0
  • 一、面向?qū)ο缶幊叹幊趟枷耄?.面向過(guò)程編程 ---> 算法俏让,邏輯(數(shù)學(xué)邏輯)2.函數(shù)式編程 ---> 函數(shù)楞遏,模塊3...
    Smr_T閱讀 511評(píng)論 0 0