python3-類與對象

面向對象技術簡介

  • 類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
  • 方法:類中定義的函數。
  • 類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作爲實例變量使用。
  • 數據成員:類變量或者實例變量用於處理類及其實例對象的相關的數據。
  • 方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱爲方法的重寫。
  • 局部變量:定義在方法中的變量,只作用於當前實例的類。
  • 實例變量:在類的聲明中,屬性是用變量來表示的,這種變量就稱爲實例變量,實例變量就是一個用 self 修飾的變量。
  • 繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作爲一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關係(例圖,Dog是一個Animal)。
  • 實例化:創建一個類的實例,類的具體對象。
  • 對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。

注:菜鳥教程-面向對象

 

self代表類的實例,而非類

類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。

class Test:
    def prt(self): 
        print(self) 
        print(self.__class__) 
t = Test() 
t.prt()

以上實例執行結果爲:

<__main__.Test instance at 0x100771878>
__main__.Test
 

從執行結果可以很明顯的看出,self 代表的是類的實例,代表當前對象的地址,而 self.class 則指向類。

self 不是 python 關鍵字,我們把他換成 runoob 也是可以正常執行的:

class Test: 
    def prt(runoob): 
        print(runoob) 
        print(runoob.__class__) 
t = Test() 
t.prt()

以上實例執行結果爲:

<__main__.Test instance at 0x100771878>
__main__.Test
 

 

class MyClass:
    """一個簡單的類實例"""
    i = 12345
    def f(self):
        return 'hello world'
 
# 實例化類
x = MyClass()
 
# 訪問類的屬性和方法
print("MyClass 類的屬性 i 爲:", x.i)
print("MyClass 類的方法 f 輸出爲:", x.f())

問題1:類屬性被重新賦值,是否影響類屬性的引用?

class testA:
	attr = 1
obj_a = testA()
testA.attr = 42
print(obj_a.attr)

#輸出結果
42

問題2:實例屬性被重新賦值,是否影響類屬性的引用?

class testA:
	attr = 1
obj_a = testA()
obj_b = testA()
obj_a.attr = 42
print(obj_b.attr)

#輸出結果
1

問題3:實例屬性和類屬性具有相同名稱,那麼“.”後邊引用的是什麼?

class testA:
	attr = 1
	def __init__(self):
		self.attr = 42
obj_a = testA()

print(obj_a.attr)

#輸出結果
42

 

 

 

 

 

發佈了76 篇原創文章 · 獲贊 5 · 訪問量 9212
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章