python支持保护类型_day14总结-内置类属性、私有化、保护及继承
內(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)方法')
p1 = Person('小明',18,'男')
"""
類.__name__ --獲取類的名字,類型是字符串 字段
類.__doc__ --獲取類的說(shuō)明文檔 字段
對(duì)象.__class__ --獲取對(duì)象對(duì)應(yīng)的類 對(duì)象屬性
類.__dict__ --獲取類中所有的字段(包含方法)和對(duì)應(yīng)的值,以字典的形式返回 字段
對(duì)象.__dict__ --獲取對(duì)象中所有的屬性和對(duì)應(yīng)的值,以字典的形式返回 對(duì)象屬性
類.__module__ --獲取指定類聲明在哪個(gè)模塊中,返回模塊名(獲取類所在的模塊的__name__值) 字段
類.__bases__ --返回當(dāng)前類的所有父類,結(jié)果是所有父類組成的元祖 字段
"""
def __str__(self):
return str(self.__dict__)[1:-1]
#系統(tǒng)自帶的魔法方法,可以定制當(dāng)前類的對(duì)象的打印內(nèi)容,實(shí)現(xiàn)這個(gè)函數(shù)的時(shí)候,要求有一個(gè)字符串類型的返回值
#只作用于單獨(dú)打印
print(p1)
def __repr__(self):
return str(self.__dict__)[1:-1]
#任何格式都有效果
a = [p1,Person('小花')]
print(a) #repr功能包含了str,若兩個(gè)都有,則單獨(dú)打印適用str,其他打印適用repr
slots魔法
可以通過(guò)給slots字段賦值來(lái)約束當(dāng)前類有哪些對(duì)象屬性
slots = ('屬性名1','屬性名2',...)
小括號(hào)可以省略,屬性名要用引號(hào)括起來(lái)
當(dāng)在類中給slots賦值后,當(dāng)前類的對(duì)象的dict屬性無(wú)效
私有化及保護(hù)
在很多高級(jí)的面向?qū)ο蟮恼Z(yǔ)言中,會(huì)將屬性和方法分為公開(kāi)的(在類的外部可以使用),私有的(只能在類的內(nèi)部使用,不能被繼承),受保護(hù)的(只能在類的內(nèi)部使用,可以被繼承)三類
python中類的內(nèi)容本質(zhì)上全部都是公開(kāi)的。私有和公開(kāi)都只是約定。
私有化 --內(nèi)容只能在類的內(nèi)部使用,不能在外面使用。
--在類中的方法名或?qū)傩悦凹觾蓚€(gè)下劃線'__',那么對(duì)應(yīng)的屬性和方法就會(huì)變成私有的。
--當(dāng)聲明類的時(shí)候聲明私有屬性時(shí),內(nèi)部會(huì)在這個(gè)基礎(chǔ)前面再加'_類名'。
屬性保護(hù) --可通過(guò)在對(duì)象屬性名前加一個(gè)'_'標(biāo)記這個(gè)屬性為受保護(hù)類型;為了告訴別人這個(gè)屬性在使用的時(shí)候, 不要直接用,而是通過(guò)getter和setter來(lái)使用。
getter:獲取對(duì)象的屬性值之前想干點(diǎn)其他的事情,那么就給這個(gè)屬性添加getter
在對(duì)應(yīng)的屬性名前加一個(gè)下劃線'_'
在@property后面聲明一個(gè)函數(shù),這個(gè)函數(shù)沒(méi)有參數(shù)(除了self),有一個(gè)返回值,并且函數(shù)名是屬性名去掉'_'
獲取屬性值的時(shí)候,通過(guò)'對(duì)象.屬性名去掉下劃線'獲取屬性的值
setter:給屬性賦值前干別的事情,就給這個(gè)屬性添加setter。(想要有setter必須先有g(shù)etter)
在對(duì)應(yīng)的屬性名前加一個(gè)下劃線'_'
在@getter名.setter后面聲明一個(gè)函數(shù),這個(gè)函數(shù)需要傳一個(gè)參數(shù),沒(méi)有返回值,并且函數(shù)名是屬性名去掉'_',同getter名
給屬性賦值的時(shí)候,通過(guò)'對(duì)象.屬性名去掉下劃線=值'的方式賦值
使用getter和setter后,getter,setter函數(shù)不可再被調(diào)用。
補(bǔ)充:
拋出異常:
raise 異常類型
raise:關(guān)鍵字
異常類型:可以是系統(tǒng)提供的異常類型,也可以自定義異常類型(必須繼承Exception)。
自定義異常類型:寫(xiě)一個(gè)類繼承Exception,然后重寫(xiě)str方法來(lái)自定義錯(cuò)誤信息。
繼承
1.什么是繼承
讓子類直接擁有父類的所有的屬性和方法
父類 --被繼承著,子類 --繼承者
python中所有的類都是直接或間接的繼承object類(基類),不用寫(xiě)明也會(huì)繼承。
2.怎么繼承
語(yǔ)法:
class 子類(父類1,父類2,...):
類的內(nèi)容
3.子類中添加內(nèi)容
添加字段和方法直接添加即可
添加對(duì)象屬性時(shí),由于子類和父類擁有相同的init方法,系統(tǒng)在調(diào)用類生成對(duì)象時(shí),先在當(dāng)前類尋找init,如果沒(méi)找到就到父類找,還沒(méi)找到就到父類的父類找,直到object類。因此想要自己定義對(duì)象屬性又要繼承父類對(duì)象屬性則要使用super。
語(yǔ)法:
super().init(參數(shù)) --根據(jù)父類init傳參,若繼承了多個(gè)父類,則只有第一個(gè)父類的init會(huì)生效。
同理,若有其他方法也和父類同名,也可以作相同處理。
總結(jié)
以上是生活随笔為你收集整理的python支持保护类型_day14总结-内置类属性、私有化、保护及继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 饮水思源画是谁画的呢?
- 下一篇: python计算四元素组合算法_pyth