Day15——ClassObject

一、方法

名稱 聲明 特點 調(diào)用
對象方法 直接聲明 自帶self參數(shù),指向當前對象 對象.方法()
類方法 加@classmethod 自帶cls參數(shù),指向當前類 類.方法()
靜態(tài)方法 加@staticmethod 沒有默認參數(shù) 類.方法()

使用:
需要對象屬性,聲明對象方法;
若不需,則看需要類字段,聲明類方法;
都不需,則聲明靜態(tài)方法


二、構造方法和__ init __方法

python中聲明類的時候系統(tǒng)會自動創(chuàng)建這個類對應的構造方法,構造方法內(nèi)會調(diào)用__ init __方法,用來對對象進行初始化, __ init __方法調(diào)用結束后,返回對象

def 與類名相同的構造方法(*args, **kwargs):
    對象 = 創(chuàng)建對象
    對象.__init__(*args, **kwargs)
    return 對象

def __init__(self):
    方法內(nèi)容
  • 對象屬性
    self.屬性名 = 值
  • 類的字段
    字段名 = 值
class Person:
    # num就是類的字段
    num = 6

    # __slots__ = ('name', 'age')

    # 在init方法中聲明對象屬性
    def __init__(self, name, age):
        self.name = name
        self.age = age

注:(__ slots __魔法):約束當前類的對象最多能擁有幾個屬性,且會使對象的 __ dict __屬性失效


三、對象屬性的 增刪查改

I. 增

對象.屬性 = 值 添加屬性(屬性不存在時)
setattr(對象, 屬性名, 值) 添加屬性(屬性不存在時,屬性名為str)

II. 刪

del 對象.屬性 刪除屬性
delattr(對象, 屬性名) 刪除屬性(屬性名為str)

III. 查

對象.屬性 獲取對象指定屬性值(屬性必須存在)
getattr(對象, 屬性名, 默認值) 獲取對象指定屬性值(屬性不存存在,返回默認值,且默認值必須賦值,屬性名為str)

IV. 改

對象.屬性 = 值 修改屬性(屬性存在時)
setattr(對象, 屬性名, 值) 修改屬性(屬性存在時,屬性名為str)

四、內(nèi)置屬性

編號 表達式 功能 返回類型
1 對象.__ class __ 獲取對象對應的類
2 類.__ name __ 獲取類的名字 字符串
3 類.__ doc __ 獲取類的說明文檔 字符串
4 對象.__ dict __ 將對象轉換成字典(屬性:值) 字典
5 類.__ module __ 獲取當前類所在的模塊的模塊名 字符串
6 類.__ bases __ 獲取當前類的父類 元祖
  • 定制對象打印格式
def __repr__(self):
    # return '<%s.%s object at %s>' % (self.__class__.__module__, self.__class__.__name__, hex(id(self)))
    # 結果:<__main__.Person object at 0x29c310>
    return '<' + str(self.__dict__)[1:-1] + ' at ' + hex(id(self)) + '>'

五、私有化

python中在屬性或者方法名前加 __ ,就可以將屬性或者方法變成私有的
(注意:只能兩 __ 開頭,不能 __ 結尾)
私有的屬性和方法只能在類的內(nèi)部使用,不能在類的外面使用
原理:
在名字前是 __ 的屬性和方法前再加 ' _ 類名 ' 去保存屬性和方法


六、getter/setter

I. getter

第一步:聲明屬性的時候在屬性名前加 _
第二步:聲明函數(shù)(函數(shù)沒有除了self以外的參數(shù),但是要有返回值。返回值就是獲取屬性拿到的值)
第三步:在類的外部通過對象.去掉 _ 的屬性去獲取相關的屬性

格式:

@property
def 去掉_的屬性名(self):
做點別的事情
返回屬性的值

class Person:
    def __init__(self):
        self._week = 7  # 屬性名前有_,使用屬性的時候不要直接用

    @property
    def week(self):
        if self._week < 7:
            return '星期%d' % self._week
        else:
            return '星期天'


p1 = Person()
# 通過不帶_的屬性來獲取屬性的值實質(zhì)是在調(diào)用getter對應的函數(shù)
print(p1.week)

II. setter

(注:想要添加setter必須先要有getter)
第一步:聲明屬性的時候在屬性名前加_
第二步:聲明函數(shù)(函數(shù)除了self以外還需要一個參數(shù),沒有返回值。這兒的參數(shù)代表給屬性賦的值)
第三步:在類的外部通過對象.去掉_的屬性去給相關屬性賦值

格式:

@屬性名去掉 _ .setter
def 去掉 _ 的屬性名(self, 參數(shù)):
做點別的事情
給屬性賦值

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

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

    # 給age添加setter
    @age.setter
    def age(self, value):
        if not isinstance(value, int):
            raise ValueError
        if not (0 <= value <= 150):
            raise ValueError
        self._age = value


p1 = Person()
# 通過不帶_的屬性給屬性賦值實質(zhì)是在調(diào)用setter對應的函數(shù)
p1.age = 45
print(p1.age)
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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