類中變量與方法
學習面向對象有一個關鍵就是封裝性,如果沒學自定義函數的就先看看自定義函數再來。
文章所有代碼都在.實例變量和類變量-SRC
文件夾中,如果在博客中看的,可以去我的倉庫中查看代碼
創建類
首先忘了講怎麼定義一個類,其實很簡單,示例如下:
# -*- coding: UTF-8 -*-
#!/usr/bin/env python3
# ch1_1.py
'''
author: Thomaslk
Create Date: 2020-05-25
note: 文章配套代碼,類的實例變量和類變量,附帶繼承
'''
class People(object): # 定義一個People類,名字叫People
typeof = 'People' # 類變量,是所有實例共有的變量(這個類變量定義的有點不實際)
def __init__(self, _sex, _age): # 構造方法,就先來一個性別和年齡的構造
self.sex = _sex # 實例變量
self.age = _age # 實例變量
#必須有self,這是給People這個自己構造,否則就可以只用類變量了
class Student(People): # 繼承了People父類
def __init__(self, _name, _SN): # 這時候導入名字和學號
self.name = _name
self.Student_Number = _SN
def PrintYourName(self):
print("name is:{0}".format(self.name))
class THOMAS(Student):
pass
cc = People('man', 11)
print("性別:{0}, 年齡:{1}".format(cc.sex, cc.age))
stu = Student('tom', 14)
print("名字:{0}, 學號:{1}".format(stu.name, stu.Student_Number))
stu.PrintYourName()
第一行的People類繼承了object這個大餅夾一切的超類,其實可以不用加object,也是自動繼承object
輸出就是:
性別:man, 年齡:11
名字:tom, 學號:14
name is:tom
類中變量——實例變量 和 類變量
實例變量
在類體中可以包含類的成員,其中包含成員變量、成員方法和屬性,成員變量又分爲實例變量和類變量,成員方法又分爲實例方法、類方法和靜態方法。如圖
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-DhiqV0dx-1590649488845)(E:\ProgramThomas\Coding-Notes\Python-Notes\第十一章_面向對象編程\1964702-20200525193632094-1230720429.png)]
“實例變量”就是某個實例(或對象)個體有的“數據”,例如你家狗的名字、年齡和性別 與 鄰居家的狗的“數據”是不同的。
Python中定義實例變量的代碼如下:
# -*- coding: UTF-8 -*-
#!/usr/bin/env python3
# ch1_2.py
'''
author: Thomaslk
Create Date: 2020-05-25
note: 文章配套代碼,定義實例變量
'''
class Animal(object):
"""定義動物類"""
def __init__(self, _age, _sex, _weight): #爲了區分,將參數加下劃線
self.age = _age
self.sex = _sex
self.weight = _weight
conn = Animal(2, 1, 10.0)
# 1是雄性,0是雌性
print('年齡:{0}'.format(conn.age))
print('性別:{0}'.format('雌性' if conn.sex == 0 else '雄性'))
print('體重:{0}'.format(conn.weight))
輸出的時候,判斷性別用了條件表達式,有關構造方法,完後看就知道了,至於cnnn
創建的時候調用的參數也跟構造方法有關,下面再說。
輸出:
年齡:2
性別:雄性
體重:10.0
三行print語句就是輸出每一個傳入的值,使用**“實例名.實例變量”**的形式訪問
類變量
類變量是所有實例共有的變量,例如有一個Account(賬戶)類,它有三個成員變量:amount(賬戶金額)、interest_rate(利率)和owner(賬戶名)。在這三個成員變量中,amount和owner會因人而異,而interest_rate是相同的,amount和owner和賬戶個體有關,對應着每一個對象會不同,interest_rate與對象是什麼無關,換句話說就是所有對象共享,這種變量稱爲“類變量”
就以Account爲例,代碼如下:
# -*- coding: UTF-8 -*-
#!/usr/bin/env python3
# ch1_3.py
'''
author: Thomaslk
Create Date: 2020-05-25
note: 文章配套代碼,認識類變量
'''
class Account:
"""定義銀行賬戶類"""
interest_rate = 0.0668 #類變量——利率
def __init__(self, _owner, _amount):
self.owner = _owner
self.amount = _amount
act = Account('Tony', 1_800_000.0)
#自己輸出驗證吧
其中的interest_rate是類變量,不管是act,還是什麼名稱,interest_rate都是自帶的,是0.0668。
訪問方法:實例變量是使用實例名.實例變量
的形式訪問的,類變量是通過類名.類變量
訪問的
__dict__魔法方法
可以使用__dict__魔法方法來查看一個類中的實例變量和其值,沒有類變量
print('act的所有變量:{0}'.format(account.__dict__))
類中函數——構造方法、實例方法、類方法 和 靜態方法
構造方法——__init__
前面的程序中已經出現了構造方法__init__(),該方法用來創建和初始化實例變量,只在開始時執行一次,這種方法就是構造方法。此方法也屬於魔法方法,這個方法的第一個參數應該是self參數,其後纔是初始化實例變量的參數,調用時不需要傳入self,self就是本身(此實例),所以不需要 傳入。
實例代碼:
#!/usr/bin/env python3
# ch1_4.py
'''
author: Thomaslk
Create Date: 2020-05-25
note: 文章配套代碼,認識構造方法
'''
class Animal(object):
def __init__(self, age, sex = 1, weight = 0.0):
self.age = age
self.sex = sex
self.weight = weight
a1 = Animal(2, 0, 10.0)
a2 = Animal(1, weight=5.0)
a3 = Animal(1, sex=0)
實例方法——self中
實例方法與實例變量都是某個實例(對象)個體特有的,實例方法的第一個參數也是self,這是特點,其意思就是將當前實例與該方法綁定起來,成爲方法,比如list.sort()
是列表的方法,就是一個實例方法
實例:
#!/usr/bin/env python3
# ch1_5.py
'''
author: Thomaslk
Create Date: 2020-05-25
note: 文章配套代碼,認識實例方法
'''
class shell(object):
def clear(self):
pass
def delete(self):
pass
def help(self):
pass
def out(self):
print("hello world")
ps = shell()
ps.out()
其中四個方法都是實例方法
類方法——不需要綁定
“類方法”和“類變量”類似屬於類,不屬於個體實例的方法,類方法不需要與實例綁定,但需要與類綁定,定義時它的第一個參數不是self,而是類的type實例。type是描述python數據類型的類,python中所有數據都是type類的一個實例。
實例:
#!/usr/bin/env python3
# ch1_6.py
'''
author: Thomaslk
Create Date: 2020-05-25
note: 文章配套代碼,認識類方法
'''
class Account:
interest_rate = 0.0668
def __init__(self, _owner, _amount):
self.owner = _owner
self.amout = _amount
#類方法
@classmethod
def interest_by(cls, amt):
return cls.interest_rate * amt
cls參數是type類型,是當前Account類型的實例
調用類方法使用類名.類方法
形式調用
靜態方法——@staticmethod
如果定義的方法既不想與類綁定,只是想把類作爲它的命名空間,那麼可以定義靜態方法。
實例:
#!/usr/bin/env python3
# ch1_7.py
'''
author: Thomaslk
Create Date: 2020-05-25
note: 文章配套代碼,認識類方法
'''
class Account:
interest_rate = 0.0668
def __init__(self, _owner, _amount):
self.owner = _owner
self.amout = _amount
#類方法
@classmethod
def interest_by(cls, amt):
return cls.interest_rate * amt
@staticmethod
def interest_with(amt):
return Account.interest_by(amt)
#輸出自己試
靜態方法不需要cls參數和self參數,使用了@staticmethod
裝飾器,聲明方法是靜態方法。
一起加油!這一章結束了!🚀
您可能發現了文章中有一些錯誤,歡迎提出!🚀