Day14.今日總結(jié)

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

創(chuàng)建類的時(shí)候,系統(tǒng)默認(rèn)為我們添加的類的屬性

class Person:
    """人類"""
    number = 61

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

    def object_func(self):
        print('對(duì)象方法:' + self.name)

    @classmethod
    def class_func(cls):
        print('類方法', cls.number)

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

    def __repr__(self):
        return '<<%s.%s object at %s>>' % (self.__class__.__module__,
                                           self.__class__.__name__,
                                           hex(id(self)))


p1 = Person('小明', 18, '男')
"""
類.__doc__  -  類的說(shuō)明文  :字段
類.__name__  -  獲取類的名字 :字段
對(duì)象.__class__  -  獲取對(duì)象的類  :對(duì)象屬性
類\對(duì)象.__dict__  -  獲取類中所有的字段與其對(duì)應(yīng)的值\獲取對(duì)象中所有的對(duì)象屬性與其對(duì)應(yīng)的值  :字段\對(duì)象屬性
"""
"""
類.__module__  -  獲取類聲明在哪個(gè)模塊中
類.__bases__  -  返回當(dāng)前類的所有父類
"""
print(Person.__module__)
# 魔法方法:
# __str__:系統(tǒng)自帶的魔法方法,可以定制當(dāng)前類的對(duì)象的打印值,返回一個(gè)字符串(單獨(dú)打印對(duì)象的效果)
# __repr__:系統(tǒng)自帶的魔法方法,可以定制當(dāng)前類的對(duì)象的打印值,返回一個(gè)字符串,適用范圍更廣(對(duì)象作為元素的時(shí)候的打印效果)
print(p1)


# 2.slots魔法
# 當(dāng)在類中給__slots__賦值后,當(dāng)前類的__dict__屬性無(wú)效
class Dog:
    # __slots__ = ('name', 'age')

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

    def __repr__(self):
        return str(self.__dict__)


dog = Dog('大黃', 3)
# del dog.age

print(dog)

在很多的高級(jí)面向?qū)ο笳Z(yǔ)言中,會(huì)將屬性和方法分為公開(kāi)的(在類的外部可以使用)、

私有的(只能在類的內(nèi)部使用,不能被繼承)、

收受保護(hù)的(只能在類的內(nèi)部使用,可以被繼承)

"""
2.python
python中類的內(nèi)容本質(zhì)上全部都是公開(kāi)的.私有和公開(kāi)都只是約定
私有化 -- 內(nèi)容只能在類的內(nèi)部使用,不能再外面使用.
在類中的方法名或者屬性名前加'',
當(dāng)聲明類的時(shí)候在名字前加'
',內(nèi)部會(huì)在這個(gè)基礎(chǔ)前面再加'_類名'

屬性保護(hù) - 可以通過(guò)在對(duì)象屬性名前加'',把這個(gè)屬性標(biāo)記成受 保護(hù)類型;為了告訴別人這個(gè)屬性在使用的時(shí)候
不要直接用,而是通過(guò)getter和setter來(lái)使用
a.getter - 獲取對(duì)象的屬性值之前想要干點(diǎn)別的事情,那么就給這個(gè)屬性添加getter
第一步:在對(duì)應(yīng)的屬性名前加
第二步:聲明函數(shù),聲明前使用@property,函數(shù)無(wú)參數(shù),有一個(gè)返回值,并且函數(shù)名時(shí)屬性名去掉'
'
第三步 獲取屬性值的時(shí)候,通過(guò)' 對(duì)象.屬性名去掉下劃線'去獲取
b.setter - 給屬性賦值前干別的事情,就給這個(gè)屬性添加setter.(想要添加setter,必須現(xiàn)有g(shù)etter)
第一步:在對(duì)應(yīng)的屬性名前加
第二步:在@屬性名去掉''.setter,有且只有一個(gè)參數(shù),沒(méi)有有返回值,并且函數(shù)名時(shí)屬性名去掉''
"""


class Person:
    def __init__(self, name, _age):
        self.name = name
        self._age = _age

    @property
    def age(self):
        return self._age + 1

    @age.setter
    def age(self, a):
        self._age = a


p1 = Person('1', 4)
print(p1.age)
p1.age = 1
print(p1.age)
# 3.拋出異常
"""
a.語(yǔ)法
 raise 異常類型
b.說(shuō)明
raise - 關(guān)鍵字
異常類型 - 可以是系統(tǒng)提供的異常類型,也可以自定義異常類型(必須繼承Exception)
"""


class WeekValueError(Exception):
    def __str__(self):
        return 'Warning'


# 4.自定義類型
# 寫(xiě)一個(gè)類繼承Exception,然后重寫(xiě)__str__方法來(lái)自定義錯(cuò)誤信息
# 練習(xí):給age屬性添加getter和setter,獲取年齡的時(shí)候拿到年齡值,和這個(gè)年齡對(duì)應(yīng)的階段
# 給age賦值的時(shí)候必須是整數(shù),并且范圍在0 - 150,如果不滿足要求報(bào)錯(cuò):AgeError
class AgeError(Exception):
    def __str__(self):
        return '年齡范圍應(yīng)在0到150歲之間并且為整數(shù)'


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

    @property
    def age(self):
        if self._age in range(0, 18):
            return '青年', self._age
        elif self._age in range(18, 50):
            return '成年', self._age
        elif self._age in range(50, 150):
            return '老年', self._age

    @age.setter
    def age(self, x):
        if x in range(0, 150):
            self._age = x
        else:
            raise AgeError


p1 = Person('1')
print(p1.age)
p1.age = 56
print(p1.age)
p1.age = 177
print(p1.age)

1.什么是繼承:讓子類直接擁有父類所有的屬性和方法

父類 - 被繼承者, 子類 - 繼承者
python中所有的類都是直接或者間接的繼承object

2.怎么繼承

"""
class 子類(父類列表)
類的內(nèi)容
"""

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

"""
添加字段和方法,直接添加
對(duì)象屬性的添加
super().父類方法()(在子類的方法中去調(diào)用父類的方法)
"""

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容