日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

python支持保护类型_day14总结-内置类属性、私有化、保护及继承

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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总结-内置类属性、私有化、保护及继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。