什麼是物件和類
https://www.cnblogs.com/poloyy/p/15178423.html
Python 類
類定義語法
最簡單的類定義看起來像這樣
class ClassName: <statement-1> . . . <statement-N>
類定義與函式定義 (def 語句) 一樣必須被呼叫執行才會起作用
類名稱空間
- 當定義類時,會建立一個新的名稱空間,也是一個區域性作用域
- 上面的類定義栗子裡,statement-1 到 statement-N 就是這個類的名稱空間
類的取名建議規則
類名中的所有單詞首字母要大寫,採用駝峰命名法(例 GameCase )的書寫方式
最簡單的一個類
class Dog: pass
- 這個類沒有屬性也沒有方法
- 實際應用中,很少會建立空類,因為空類沒有任何實際意義
包含屬性、方法的一個類
class Person: def introduce(self): print('My name is %s, I am %d years old' % (self.name, self.age))
Person 類,有一個方法 introduce,有兩個屬性 name、age
通過 Person 類建立兩個例項物件
# 物件一 tom = Person() # 物件屬性 tom.name = 'tom' tom.age = 10 # 物件二 jerry = Person() # 物件屬性 jerry.name = 'jerry' jerry.age = 20 # 呼叫物件的方法 tom.introduce() jerry.introduce() # 輸出結果 My name is tom, I am 10 years old My name is jerry, I am 20 years old
類物件
什麼是類物件
- 宣告瞭一個類,它就是一個類物件
- 程式執行時,在記憶體中就會建立一個類物件,有且只有一個
- 類物件也有自己的屬性和方法,分別叫做:類屬性、類方法(後面詳解)
列印下類物件看看
# 類物件 class person: pass print(person) print(id(person)) # 輸出結果 <class '__main__.person'> 140485598521200
列印的就是一個類物件和記憶體地址
類物件支援兩種操作
- 屬性引用
- 例項化
屬性引用
- 使用 Python 所有屬性引用的標準語法: Obj.name
- 有效的屬性名稱是類物件被建立時存在於類名稱空間中的所有名稱
class MyClass: """A simple example class""" i = 12345 def f(self): return 'hello world'
有效的屬性引用
- MyClass.i:返回一個整數
- MyClass.f:返回一個函式物件
- MyClass.__doc__:返回當前類的文件字串
print(MyClass.i) print(MyClass.f) print(MyClass.__doc__) # 輸出結果 12345 <function MyClass.f at 0x10f43f310> A simple example class
例項化
例項化其實就是呼叫類物件,從而建立一個例項物件
c = MyClass()
建立類的新例項並將此物件分配給區域性變數 c
例項物件
什麼是例項物件
- 通過類例項化操作生成物件就是例項物件
- 一個類可以多次例項化,生成多個例項物件
# 例項物件 class person: pass # 例項化:類名() p1 = person() p2 = person() p3 = person() print(p1, id(p1)) print(p2, id(p2)) print(p3, id(p3)) # 輸出結果 <__main__.person object at 0x10e42b8b0> 4534220976 <__main__.person object at 0x10e42b880> 4534220928 <__main__.person object at 0x10e42b850> 4534220880
三個 person 類例項物件,分別有自己獨立的記憶體地址
常說的物件導向程式設計是什麼
- 設計類
- 建立類例項物件
- 例項物件呼叫方法
建立例項物件詳解
- 在記憶體中為物件分配空間
- 呼叫初始化方法 __init__ 為物件初始化
- 物件建立後,記憶體中就有一個類的例項物件了
由此可見,一個類可以有很多個物件,每個物件都有屬於自己的屬性、方法;
- 建立出來的 物件 叫做 類的 例項物件
- 建立物件的 行為 叫做 例項化
- 物件的屬性 叫做 例項屬性
- 物件呼叫的方法 叫做 例項方法
__init__、例項屬性、例項方法後續詳解
知識點
- 每個物件都有自己獨立的記憶體空間,儲存自己的屬性
- 但是例項方法在記憶體中都只有一個,例項方法中的 self 就是例項物件的引用,當物件呼叫例項方法時,會預設把例項物件傳給方法內部
如果不懂的話,看看下面程式碼的輸出就知道啦; id() 是用於獲取物件的記憶體地址
class person(): def __init__(self, name): self.name = name print(f"init-{self.name} ", id(self)) def test(self): print(f"test-{self.name} ", id(self)) p1 = person("p1") print("p1-", id(p1)) print("p1 fun-", id(p1.test)) p2 = person("p2") print("p2-", id(p2)) print("p2 fun-", id(p2.test)) # 輸出結果 init-p1 4435237568 p1- 4435237568 p1 fun- 4435260032 init-p2 4435237472 p2- 4435237472 p2 fun- 4435260032
可以看到,兩個例項物件呼叫的例項方法是同一個記憶體地址