国产精品免费嫩草研究院|无遮羞动漫在线观看AV|国产麻豆精品传媒AV国产在线|村在线观看|寂寞情人1正版|韩国床震韩国床震古|精品系列专区久久

靜態(tài)屬性的陷阱 python中類與對(duì)象的命名空間、__dict__ 和 dir 在繼承中使用說(shuō)明

1. 面向?qū)ο蟮母拍?)類是一類抽象的事物,對(duì)象是一個(gè)具體的事物;用類創(chuàng)建對(duì)象的過(guò)程,稱為實(shí)例化 。
2)類就是一個(gè)模子,只知道在這個(gè)模子里有什么屬性、什么方法,但是不知道這些屬性、方法具體是什么;
所以,我們要在這個(gè)模子的基礎(chǔ)上 造出一個(gè)具體的實(shí)例(對(duì)象),這個(gè)實(shí)例就會(huì)具體化屬性、方法
3)所有的數(shù)據(jù)類型都是類,都是抽象的;根據(jù)數(shù)據(jù)類型定義變量,該變量就是一個(gè)具體的值(對(duì)象) 。
面向過(guò)程 --> 面向?qū)ο蟮霓D(zhuǎn)變
定義一個(gè)函數(shù)   《==》 定義一個(gè)類
函數(shù)的返回值(字典)   《==》類的對(duì)象(類似字典,只不過(guò)調(diào)用方式發(fā)生了改變)
函數(shù)的執(zhí)行過(guò)程 《==》類的實(shí)例化
請(qǐng)看 代碼展示1 和 代碼展示2
 1 # 用面向?qū)ο蟮乃枷搿⒚嫦蜻^(guò)程的語(yǔ)法 去實(shí)現(xiàn) Rectangle的計(jì)算 2 def Rectangle(length=0, width=0): 3     self = {}  # 存儲(chǔ)屬性值 4     def __init__(*args):  # 初始化函數(shù) -- 完成對(duì)矩陣rectangle的長(zhǎng)、寬初始化,以及面積、周長(zhǎng)的調(diào)用方式 5         self['length'] = args[0] 6         self['width'] = args[1] 7         self['area'] = area 8         self['perimeter'] = perimeter 9     def area():10         return self['length'] * self['width']11     def perimeter():12         return 2 * (self['length'] + self['width'])13     __init__(length, width)  # 調(diào)用初始化函數(shù)14     return self1516 rec_obj = Rectangle(10,5)   # rec_obj 相當(dāng)于類的一個(gè)實(shí)例17 print(rec_obj)      # rec_obj中存放了實(shí)例的屬性、方法,通過(guò)實(shí)例可以查看屬性 與 調(diào)用方法18 print('length:%s, width:%s, area:%s, perimeter:%s'\19       %(rec_obj['length'], rec_obj['width'], rec_obj['area'](), rec_obj['perimeter']()))代碼展示1
 1 class Rectangle: 2     temVar = 'over' #定義靜態(tài)屬性,共享于類中的每個(gè)對(duì)象 3     def __init__(self, *args):  # 創(chuàng)建對(duì)象后執(zhí)行的第一個(gè)函數(shù),self就是類創(chuàng)建的對(duì)象,該函數(shù)返回類的對(duì)象self 4         self.length = args[0] 5         self.width = args[1] 6     def area(self): 7         return self.length * self.width 8     def perimeter(self): 9         return 2 * (self.length + self.width)1011 rec_obj1 = Rectangle(10, 5) # 實(shí)例化一個(gè)具體對(duì)象1213 # 通過(guò) 對(duì)象 查看屬性(包括靜態(tài)屬性)與調(diào)用方法14 print('length:%s, width:%s, area:%s, perimeter:%s'\15       %(rec_obj1.length, rec_obj1.width, rec_obj1.area(), rec_obj1.perimeter()))16 print(rec_obj1.temVar)  # 靜態(tài)屬性1718 # 通過(guò) 類名 調(diào)用方法 、類中的靜態(tài)屬性19 print('area:%s, perimeter:%s'%( Rectangle.area(rec_obj1), Rectangle.perimeter(rec_obj1)))20 print(Rectangle.temVar)  # 靜態(tài)屬性2122 # 通過(guò)對(duì)象名修改屬性(若self里 存在該屬性,是修改;若self里 不存在該屬性,是添加新屬性)23 # rec_obj1.length = 2024 # rec_obj1.temVar = 'object_over'  # 給對(duì)象中添加一個(gè)新屬性 'temVar': 'object_over'25 # 通過(guò)類名修改屬性(若類里 存在該屬性<靜態(tài)屬性>,是修改;若類里 不存在該屬性,是添加新屬性,<靜態(tài)屬性>)26 # Rectangle.length = 50   # 在類中添加一個(gè)新屬性 'length': 5027 # Rectangle.temVar = 'class_over'2829 # __dict__的使用30 print(rec_obj1.__dict__)    # 查看對(duì)象的所有屬性,即self屬性31 print(Rectangle.__dict__)   # 查看類的所有靜態(tài)屬性、方法32 # __dict__ 對(duì)于 對(duì)象的 增刪改查操作都可以通過(guò)字典的語(yǔ)法進(jìn)行33 # __dict__ 對(duì)于 類中的名字只能看 不能操作

經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀