Python - 面向對象編程 - 什么是 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

 

類對象

什么是類對象

  • 聲明了一個類,它就是一個類對象
  • 程序運行時,在內存中就會創建一個類對象,有且只有一個
  • 類對象也有自己的屬性和方法,分別叫做:類屬性、類方法(后面詳解)

 

打印下類對象看看

# 類對象
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. 對象創建后,內存中就有一個類的實例對象了

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

  • 創建出來的 對象 叫做 類的 實例對象
  • 創建對象的 行為 叫做 實例化
  • 對象的屬性 叫做 實例屬性
  • 對象調用的方法 叫做 實例方法

__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 

可以看到,兩個實例對象調用的實例方法是同一個內存地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM