python支持保护类型_day14总结-内置类属性、私有化、保护及继承
內置類屬性
創建類的時候,系統默認為我們添加的類的屬性
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('對象方法:'+self.name)
@classmethod
def class_func(cls):
print('類方法:' + cls.number)
@staticmethod
def static_func():
print('靜態方法')
p1 = Person('小明',18,'男')
"""
類.__name__ --獲取類的名字,類型是字符串 字段
類.__doc__ --獲取類的說明文檔 字段
對象.__class__ --獲取對象對應的類 對象屬性
類.__dict__ --獲取類中所有的字段(包含方法)和對應的值,以字典的形式返回 字段
對象.__dict__ --獲取對象中所有的屬性和對應的值,以字典的形式返回 對象屬性
類.__module__ --獲取指定類聲明在哪個模塊中,返回模塊名(獲取類所在的模塊的__name__值) 字段
類.__bases__ --返回當前類的所有父類,結果是所有父類組成的元祖 字段
"""
def __str__(self):
return str(self.__dict__)[1:-1]
#系統自帶的魔法方法,可以定制當前類的對象的打印內容,實現這個函數的時候,要求有一個字符串類型的返回值
#只作用于單獨打印
print(p1)
def __repr__(self):
return str(self.__dict__)[1:-1]
#任何格式都有效果
a = [p1,Person('小花')]
print(a) #repr功能包含了str,若兩個都有,則單獨打印適用str,其他打印適用repr
slots魔法
可以通過給slots字段賦值來約束當前類有哪些對象屬性
slots = ('屬性名1','屬性名2',...)
小括號可以省略,屬性名要用引號括起來
當在類中給slots賦值后,當前類的對象的dict屬性無效
私有化及保護
在很多高級的面向對象的語言中,會將屬性和方法分為公開的(在類的外部可以使用),私有的(只能在類的內部使用,不能被繼承),受保護的(只能在類的內部使用,可以被繼承)三類
python中類的內容本質上全部都是公開的。私有和公開都只是約定。
私有化 --內容只能在類的內部使用,不能在外面使用。
--在類中的方法名或屬性名前加兩個下劃線'__',那么對應的屬性和方法就會變成私有的。
--當聲明類的時候聲明私有屬性時,內部會在這個基礎前面再加'_類名'。
屬性保護 --可通過在對象屬性名前加一個'_'標記這個屬性為受保護類型;為了告訴別人這個屬性在使用的時候, 不要直接用,而是通過getter和setter來使用。
getter:獲取對象的屬性值之前想干點其他的事情,那么就給這個屬性添加getter
在對應的屬性名前加一個下劃線'_'
在@property后面聲明一個函數,這個函數沒有參數(除了self),有一個返回值,并且函數名是屬性名去掉'_'
獲取屬性值的時候,通過'對象.屬性名去掉下劃線'獲取屬性的值
setter:給屬性賦值前干別的事情,就給這個屬性添加setter。(想要有setter必須先有getter)
在對應的屬性名前加一個下劃線'_'
在@getter名.setter后面聲明一個函數,這個函數需要傳一個參數,沒有返回值,并且函數名是屬性名去掉'_',同getter名
給屬性賦值的時候,通過'對象.屬性名去掉下劃線=值'的方式賦值
使用getter和setter后,getter,setter函數不可再被調用。
補充:
拋出異常:
raise 異常類型
raise:關鍵字
異常類型:可以是系統提供的異常類型,也可以自定義異常類型(必須繼承Exception)。
自定義異常類型:寫一個類繼承Exception,然后重寫str方法來自定義錯誤信息。
繼承
1.什么是繼承
讓子類直接擁有父類的所有的屬性和方法
父類 --被繼承著,子類 --繼承者
python中所有的類都是直接或間接的繼承object類(基類),不用寫明也會繼承。
2.怎么繼承
語法:
class 子類(父類1,父類2,...):
類的內容
3.子類中添加內容
添加字段和方法直接添加即可
添加對象屬性時,由于子類和父類擁有相同的init方法,系統在調用類生成對象時,先在當前類尋找init,如果沒找到就到父類找,還沒找到就到父類的父類找,直到object類。因此想要自己定義對象屬性又要繼承父類對象屬性則要使用super。
語法:
super().init(參數) --根據父類init傳參,若繼承了多個父類,則只有第一個父類的init會生效。
同理,若有其他方法也和父類同名,也可以作相同處理。
總結
以上是生活随笔為你收集整理的python支持保护类型_day14总结-内置类属性、私有化、保护及继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 饮水思源画是谁画的呢?
- 下一篇: 求一个qq网名伤感的女生带符号。