Python - 物件導向程式設計 - 什麼是 Python 類、類物件、例項物件

小菠蘿測試筆記 發表於 2021-08-28
Python 物件導向

什麼是物件和類

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

 

類物件

什麼是類物件

  • 宣告瞭一個類,它就是一個類物件
  • 程式執行時,在記憶體中就會建立一個類物件,有且只有一個
  • 類物件也有自己的屬性和方法,分別叫做:類屬性、類方法(後面詳解)

Python - 物件導向程式設計 - 什麼是 Python 類、類物件、例項物件

 

列印下類物件看看

# 類物件
class person:
    pass


print(person)
print(id(person))


# 輸出結果
<class '__main__.person'>
140485598521200

列印的就是一個類物件和記憶體地址

 

類物件支援兩種操作

  1. 屬性引用
  2. 例項化

 

屬性引用

  • 使用 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 類例項物件,分別有自己獨立的記憶體地址 

 

常說的物件導向程式設計是什麼

  1. 設計類
  2. 建立類例項物件
  3. 例項物件呼叫方法

 

建立例項物件詳解

  1. 記憶體中為物件分配空間
  2. 呼叫初始化方法  __init__  為物件初始化
  3. 物件建立後,記憶體中就有一個類的例項物件了

Python - 物件導向程式設計 - 什麼是 Python 類、類物件、例項物件

由此可見,一個類可以有很多個物件,每個物件都有屬於自己的屬性、方法;

  • 建立出來的 物件 叫做 類的 例項物件
  • 建立物件的 行為 叫做 例項化
  • 物件的屬性 叫做 例項屬性
  • 物件呼叫的方法 叫做 例項方法

__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 

可以看到,兩個例項物件呼叫的例項方法是同一個記憶體地址