1. 程式人生 > 其它 >Python中的 類(class)(1)

Python中的 類(class)(1)

技術標籤:Python基礎pythonclass類的屬性類的方法

Python中的 類(class)(1)

前言

類(class)是python中很重要的一個概念,也是我們面象物件程式設計中最重要的概念主之一
如何去理解類,就像如何去理解函式(方法)一樣,首先要有一顆常態的心,不要因為新名詞,新事物,而自亂陣腳.
然後,儘量用類比的方法去學習一個新事物,會讓你更容易理解.

這裡簡單的說明一下本人對類的理解
從使用角度講,類是一個有特點的功能整合者.
即當我們說到一個類的時候,

  1. 通常會去了解這個類能做什麼事情.比如,我們Pygame中的矩形(Rect)就是一個類,它可以移動.
  2. 這個類有什麼特點(屬性)

從程式設計角度講,類的組織是為了更好的重用程式碼,更好的組織程式碼,以及本質是一個數據型別.

本節提要

內容詳情

類的宣告:

class MyClass(object):
	pass

class: 是一個關鍵字,就像定義函式時用的def一樣,說明我們要定義的是一個類
MyClass: 我們設計的類的類名.就像我們所有的地球人,統稱"人"一樣,對一個型別的統稱
引數object:父類

類的構函式

class MyClass(object):
	def __init__(self, args):
		pass

init(self,args)
這個函式稱為類的建構函式
用來對類進行一些初始化的操作

這個函式在類進行例項化的時候自動呼叫
例項:

class MyClass(object):
    def __init__(self, text):
        print(text)
mc = MyClass("我是在初始化的時候列印的")  # 類的例項化

在這裡插入圖片描述
可以看到,當我們例項話的時候,會自動呼叫__init__()函式
名詞:
類中的函式,通常稱為類的方法
注意:
建構函式中,函式名是固定的,第一個引數self也是固定的.
如果沒有self這個引數,建構函式會出錯
看以下例項

class MyClass2(object):
    def __init__
(text): print(text) mc = MyClass2("我是在初始化的時候列印的")

效果圖
在這裡插入圖片描述
總結:
建構函式:

  1. 函式名:init()
  2. 第一個引數self固定的

類的方法

類的例項方法要點:

  1. 定義在類內部的函式
  2. 第一個引數必須是self
  3. 使用時,例項名.方法名()
# 類的方法示例
class MyClass3(object):
    # 建構函式
    def __init__(self, text):
        print("我是構造方法" + text)
    # 類的方法:move()
    def move(self):
        print("我移動了")

mc4 = MyClass3("mc4")
mc4.move()  # 呼叫類的move()方法

類的靜態方法:
當我們希望一個類,不例項化也能呼叫類的某個方法時,這個方法應該被定義成靜態方法

  • 方法定義前加下@staticmethod修飾
  • 方法的引數沒有self
  • 呼叫時直接用類名.方法名()來使用
class MyClass5(object):
    # 建構函式
    def __init__(self, text):
        print("我是構造方法" + text)
    # 類的靜態方法,可以例項化直接呼叫
    @staticmethod
    def dd():
        print("所有例項共有方法")
MyClass5.dd()  

類的屬性

第一種:例項屬性
要點:

  1. 定義在建構函式/類的方法內
  2. 在類的定義中用self.屬性名來使用
  3. 例項化類後用實全例名.屬性名來訪問或者修改
    第二種: 類的屬性
    要點:
  4. 定義在方法外
  5. 在類的定義中用類名.屬性名來使用
  6. 類的屬性被所有類的例項所共有(改變一次類屬性,其他的例項的類屬性也會變)
  7. 可以直接使用類名.屬性名來使用
  8. 當類的屬性被例項單獨改變時,這個屬性會與例項繫結,不再受類.屬性名改變而改變
# 類的屬性示例
class MyClass6(object):
    weight = 100 # 類屬性
    def __init__(self, name, age):
        self.name = name  # 例項屬性name
        self.age = age  # 例項屬性age
    
print(MyClass6.weight)  # 列印類屬性
mc6_1 = MyClass6("mc6_1", 12) # 例項化類
print(mc6_1.name, mc6_1.age)  # 訪問例項化屬性
# 改變類屬性與例項化屬性
MyClass6.weight = 200 # 我又重了
mc6_1.name = "mc6_1改名了"
mc6_1.age = 11 #我變年輕了
print(MyClass6.weight)
print(mc6_1.name, mc6_1.age)  # 訪問例項化屬性
mc6_2 = MyClass6("mc6_2", 20)
print(mc6_2.weight)
mc6_2.weight = 300 # 改變了例項的類屬性
print(mc6_1.weight)
print(mc6_2.weight)
MyClass6.weight =  400  # 再改類屬性
print(mc6_1.weight)
print(mc6_2.weight) # 該例項的此類屬性不會再隨著類名.屬性名 的操作方法改變而改變了

在這裡插入圖片描述

後記

類的內容還有很多,這裡簡單的介紹了類的基本內容:

  • 類的定義方法
  • 類的建構函式
  • 類的方法
  • 類的屬性

這幾天在折騰電腦,給自己的電腦裝了個黑蘋果系統.由於無線網絡卡驅動問題,導致黑蘋果系統還無法正式投入使用.明天網絡卡就能到了,到時候用黑蘋果感受一下寫程式碼的感覺是不是比win好點.

今天更新的內容有點少,但是內容的深度比較大,需要慢慢來體會