物件屬性的呼叫 30 物件導向 回顧

2021-10-14 20:54:47 字數 4847 閱讀 2067

1 oop 程式設計 object-oriented programming   --->物件導向程式設計

opp 程式設計 procedure oriented programming--->面向過程程式設計

2 物件導向程式設計,區別於面向過程程式設計

-最大核心:有物件,有屬性,有方法

3 類與物件

class people:

pass

p=people()

p.屬性

p.方法()

4 定製物件的獨有特徵

(1)類和物件都有自己的命名空間

(2)物件.屬性--->優先使用自己命名空間的屬性--->自己沒有使用類的

(3)物件.屬性=value---->不會修改掉類命名空間的值--->只改自己的

5 物件屬性查詢屬性

(1)先從物件自己找,找不到去類中找,再找不到報錯

(2)類屬性的更改 類名.屬性=變更 不會影響物件自己的命名空間

6 物件的繫結方法

# 方法和函式的區別?

-方法會自動傳值,方法是繫結給某個物件的

-函式有幾個值就傳幾個值

-注意點:物件來呼叫是方法,類來呼叫是函式

# 類內部定義,沒有被裝飾器修飾的方法,都是物件的繫結方法

7 類和型別

(1)type(物件)---->類

(2)如何去檢視原始碼:typpe(物件)

from xx import 類

8 有物件和沒有物件的區別

以後一般情況盡量使用類來寫

9 模擬王者榮耀對戰遊戲

10 物件導向的繼承

-少些**

-class people(animal):

pass

-多繼承

-新式類

-經典類

-繼承後的屬性查詢順序

-物件---》類---》父類(從左到右)

11 類的派生

-有了繼承關係以後,在子類中新的屬性和方法,稱為派生

-子類重寫父類的方法,功能增加,也叫派生

12 物件導向的組合

-物件中套物件

-物件中的物件其實是乙個引用

13 菱形問題(必須出現菱形,最頂層objct不算)

-新式類:廣度優先

-經典類:深度優先

-繼承關係的mro列表

-以後看原始碼的時候-繼承關係裡面的查詢順序

self.方法(),不要盲目的按照ctrl鍵點,需要從根上往上找

14 super()

-特殊物件----》父類物件(嚴格按照mro列表查詢)

-類名.方法() 指名道姓的使用,不會亂

-super()呼叫方法不需要傳self

-類名來呼叫方法需要傳self

15 多型和多型性

-多型-同一類食物的多種形態

-有乙個父類(animal)

-有一堆子類,繼承父類(people,cat,dog)

-子類例項化得到物件,這就叫多型

-多型性

-不考慮物件具體型別情況下,使用物件

-people,cat,dog

-run(物件)

-鴨子型別

-走路像鴨子,看起來像鴨子,物件就是鴨子

-**體現

-abc模組限制子類必須重寫父類的方法

-拋異常的方式限制子類必須重寫父類的方法

16 類的封裝

-把屬性和方法包裝到類內部

-把屬性或方法隱藏,只讓屬性跟方法在內部使用,只對外暴露簡單介面(方法)

-屬性或方法前加 __ 也會看到只加 _

-外部也可以使用到隱藏屬性和方法 _類名__屬性名

-內部正常使用

17 property

-把方法包裝成資料屬性

-其他使用

class goods:

@property # 相當於@price.getter

def price(self):

print('@property')

@price.setter

def price(self, value):

print('@price.setter')

@price.deleter

def price(self):

print('@price.deleter')

18 繫結方法和非繫結方法

-沒有裝飾器修飾的:繫結給物件,物件來呼叫,自動傳入物件,類來呼叫就是普通函式,有個值傳入幾個值

-用classmethod修飾的:繫結給類,類來呼叫,自動把類傳入,物件也可以來呼叫,把物件轉成類,傳入

-用staticmethod修飾的:不繫結給任何人,誰都可以來呼叫,有幾個值裝飾器

type __new__---->使用staticmethod修飾了---》作者之所以這樣寫的目的

讓我們看到__new__以後,就知道它是個靜態方法,不繫結給任何人

# 補充:

以後只要是python專案,根路徑下都要有乙個requirements.txt,文字檔案

記錄這個專案使用了哪些第三方模組,版本是多少

1 isinstance和issubclass

-isinstance判斷乙個物件是不是乙個類的物件(繼承關係也能判斷)

-issubclass判斷乙個類是不是另乙個類的子類(繼承關係也能判斷)

2 反射

setattr:向物件中設定屬性或方法(向類設定)

getattr:通過物件獲取屬性或方法

delattr:刪除物件中的屬性或方法

hasattr:判斷屬性或方法是否再物件中

# 反射模組

__import__ # 普通反射模組

__import__("lib.text.commons", fromlist=true) # 帶點的反射

# 反射模組二

import importlib

a=importlib.import_module('a')

print(a.setting)

3 . 攔截方法

-__setattr__:物件.屬性=值 觸發它

-__getattr__:物件.屬性 屬性不存在觸發

-__delattr__:del 物件.屬性 觸發它

-__getattribute__ # 它會先於__getattr__執行,如果重寫了它, __getattr__就不會執行

4 item系列

-__setitem__: 物件['key']=value 觸發它執行

-__getitem__: 物件['key'] 觸發它執行

-__delitem__: del 物件['key'] 觸發它執行

5 __format__

-format(物件) ---》觸發類中__format__的執行

-''.format(物件) ---》觸發類中__format__的執行

6 __del__

del 物件 觸發它指向

7 __slots__

-類屬性:

-限制物件屬性只能是__slots__中的

-節省記憶體(屬性比較少,物件很多)

8 __all__

-from xx import * 匯入只會匯入__all__中定義的屬性

9 __doc__

-類的注釋

-類名.__doc__ # 列印出注釋

-它不能繼承

10 __call__

-物件()---->觸發該物件所屬類的 __call__

11 __init__和__new__

-__new__建立乙個空物件

-__init__完成初始化

-new是再init之前執行

-最本質是元類中的__call__內部呼叫了new和init

12 __str__和__repr__

-print(物件) 會觸發 __str__的執行,如果沒有再觸發__repr__的執行

-在命令視窗中,寫物件 觸發__repr__的執行

13 迭代器協議

-寫乙個物件,支援for迴圈來迴圈它

-重寫__iter__和__next__

14 __module__和__class__

-__module__看物件屬於哪個模組

物件.__module__

-__class__看物件屬於哪個類

物件.__class__

15 上下文管理協議

-with 物件 as f: 觸發物件的 __enter__執行,返回什麼,f就是什麼

-脫離了with,就會觸發__exit__,異常處理和資源清理

-__enter__

-__exit__

16 描述符

-新式類,重寫了 __get__,__set__,__delete__,就是描述符

-用來**類屬性

-資料描述符和非資料描述符

-通過描述符限制物件的屬性型別

-類裝飾器(有參)

-類裝飾器+描述符實現限制物件的屬性型別

-property,classmethod,staticmethod底層原理,自定製

17 元類

-類的類,預設是type

-重寫元類,必須繼承type

-class people(metaclass=自己寫的)

-__init__

-__call__

-__new__

-通過元類控制類的建立

-通過元類控制物件的建立

18 單例模式:

-全域性只有乙個物件

-5種方式

物件導向 屬性

資料屬性 configurable 能否通過delete刪除屬性而重新定義屬性,或能否把屬性修改為訪問器屬性。預設為 true。enumerable 能否通過for in迴圈返回屬性。預設為 true。writable 能否修改屬性的值。預設為 true。value 包含這個屬性的資料值。讀取屬性值...

JS物件導向之物件的屬性

1.屬性的設定和獲取通過 操作符或者 區別 操作符取自身的屬性,可以是變數 var o o.name 緣滅 var aaa name console.log o aaa 緣滅ps 一道比較坑的筆試題 var str abc str 1 var test typeof str if test.leng...

物件導向基礎 屬性

談到屬性,不妨先聊聊屬性和字段的區別。屬性 是提供給類的外部呼叫時用的。get表示可讀 set表示可寫 字段 類的內部用於儲存資料用的。先記住一句話 習慣用法,屬性開頭字母大寫,字段開頭字母小寫!using system using system.collections.generic using ...