python类的定义和创建_Python类对象的创建和使用
通過前面章節的學習,我們已經學會如何定義一個類,但要想使用它,必須創建該類的對象。
創建類對象的過程,又稱為類的實例化。
類名(參數)
定義類時,如果沒有手動添加 __init__() 構造方法,又或者添加的 __init__() 中僅有一個 self 參數,則創建類對象時的參數可以省略不寫。
例如,如下代碼創建了名為 CLanguage 的類,并對其進行了實例化:
class CLanguage :
# 下面定義了2個類變量
name = "C語言中文網"
add = "http://c.biancheng.net"
def __init__(self,name,add):
#下面定義 2 個實例變量
self.name = name
self.add = add
print(name,"網址為:",add)
# 下面定義了一個say實例方法
def say(self, content):
print(content)
# 將該CLanguage對象賦給clanguage變量
clanguage = CLanguage("C語言中文網","http://c.biancheng.net")
在上面的程序中,由于構造方法除 self 參數外,還包含 2 個參數,且這 2 個參數沒有設置默認參數,因此在實例化類對象時,需要傳入相應的 name 值和 add 值(self 參數是特殊參數,不需要手動傳值,Python 會自動傳給它值)。
類變量和實例變量,簡單地理解,定義在各個類方法之外(包含在類中)的變量為類變量(或者類屬性),定義在類方法中的變量為實例變量(或者實例屬性),二者的具體區別和用法可閱讀《Python類變量和實例變量》
Python類對象的使用
定義的類只有進行實例化,也就是使用該類創建對象之后,才能得到利用。總的來說,實例化后的類對象可以執行以下操作:
訪問或修改類對象具有的實例變量,甚至可以添加新的實例變量或者刪除已有的實例變量;
調用類對象的方法,包括調用現有的方法,以及給類對象動態添加方法。
類對象訪問變量或方法
使用已創建好的類對象訪問類中實例變量的語法格式如下:
類對象名.變量名
使用類對象調用類中方法的語法格式如下:
對象名.方法名(參數)
注意,對象名和變量名以及方法名之間用點 "." 連接。
例如,下面代碼演示了如何通過 clanguage 對象調用類中的實例變量和方法:
#輸出name和add實例變量的值
print(clanguage.name,clanguage.add)
#修改實例變量的值
clanguage.name="Python教程"
clanguage.add="http://c.biancheng.net/python"
#調用clanguage的say()方法
clanguage.say("人生苦短,我用Python")
#再次輸出name和add的值
print(clanguage.name,clanguage.add)
程序運行結果為:
C語言中文網 網址為: http://c.biancheng.net
C語言中文網 http://c.biancheng.net
人生苦短,我用Python
Python教程 http://c.biancheng.net/python
給類對象動態添加/刪除變量
Python 支持為已創建好的對象動態增加實例變量,方法也很簡單,舉個例子:
# 為clanguage對象增加一個money實例變量
clanguage.money= 159.9
print(clanguage.money)
運行結果為:
159.9
可以看到,通過直接增加一個新的實例變量并為其賦值,就成功地為 clanguage 對象添加了 money 變量。
既然能動態添加,那么是否能動態刪除呢?答案是肯定的,使用 del 語句即可實現,例如:
#刪除新添加的 money 實例變量
del clanguage.money
#再次嘗試輸出 money,此時會報錯
print(clanguage.money)
運行程序會發現,結果顯示 AttributeError 錯誤:
Traceback (most recent call last):
File "C:/Users/mengma/Desktop/1.py", line 29, in
print(clanguage.money)
AttributeError: 'CLanguage' object has no attribute 'money'
給類對象動態添加方法
注意,初學者在理解下面內容之前,需明白 self 參數的含義和作用,可閱讀《Python self用法》詳細了解。
Python 也允許為對象動態增加方法。以本節開頭的 Clanguage 類為例,由于其內部只包含一個 say() 方法,因此該類實例化出的 clanguage 對象也只包含一個 say() 方法。但其實,我們還可以為 clanguage 對象動態添加其它方法。
需要注意的一點是,為 clanguage 對象動態增加的方法,Python 不會自動將調用者自動綁定到第一個參數(即使將第一個參數命名為 self 也沒用)。例如如下代碼:
# 先定義一個函數
def info(self):
print("---info函數---", self)
# 使用info對clanguage的foo方法賦值(動態綁定方法)
clanguage.foo = info
# Python不會自動將調用者綁定到第一個參數,
# 因此程序需要手動將調用者綁定為第一個參數
clanguage.foo(clanguage) # ①
# 使用lambda表達式為clanguage對象的bar方法賦值(動態綁定方法)
clanguage.bar = lambda self: print('--lambda表達式--', self)
clanguage.bar(clanguage) # ②
上面的第 5 行和第 11 行代碼分別使用函數、lambda 表達式為 clanguage 對象動態增加了方法,但對于動態增加的方法,Python 不會自動將方法調用者綁定到它們的第一個參數,因此程序必須手動為第一個參數傳入參數值,如上面程序中 ① 號、② 號代碼所示。
有讀者可能會問,有沒有不用手動給 self 傳值的方法呢?通過借助 types 模塊下的 MethodType 可以實現,仍以上面的 info() 函數為例:
def info(self,content):
print("C語言中文網地址為:%s" % content)
# 導入MethodType
from types import MethodType
clanguage.info = MethodType(info, clanguage)
# 第一個參數已經綁定了,無需傳入
clanguage.info("http://c.biancheng.net")
可以看到,由于使用 MethodType 包裝 info() 函數時,已經將該函數的 self 參數綁定為 clanguage,因此后續再使用 info() 函數時,就不用再給 self 參數綁定值了。
總結
以上是生活随笔為你收集整理的python类的定义和创建_Python类对象的创建和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unbuntu cmake安装mysql
- 下一篇: 为什么python工程师掌握这些就够了_