一、類
類(Class)是用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。額…還是舉例說明吧
class human: # 定義一個類叫human
name = "someone" # 類屬性name
age = 20; # 類屬性age
def say(self): # 類方法,所有的類方法都至少有一個參數self
print("hello")
def think(self,a=1,b=2):
print(a+b)
human1 = human() # 實例化human類,得到對象human1
print(human1.name) # 訪問對象的name屬性
human1.say() # 調用對象的say()方法
human1.think(a=2,b=3) # 調用對象的think()方法,並且傳入參數
類裏有一個__init__()方法(構造方法),此方法由兩個下劃線開頭和結尾,它會在實例化類的時候自動執行,無需手動調用,所以一般可以用它完成一些初始化工作。上面的代碼可以改成下面的
class human: # 定義一個類
def __init__(self,name="someone",age=20): # 此方法自動執行,用於初始化
self.name = name # 類屬性name
self.age = age; # 類屬性age
def say(self): # 類方法,所有的類方法都至少有一個參數self
print("hello")
def think(self,a=1,b=2):
print(a+b)
human1 = human("pan",30) # 實例化human類,得到對象human1
print(human1.name) # 訪問對象的name屬性
human1.say() # 調用對象的say()方法
human1.think(a=2,b=3) # 調用對象的think()方法,並且傳入參數
我們需要注意幾點
1.參數
類裏所有的方法都至少有一個參數self(或者this),其他的與普通方法無區別
2.專有方法
除了__init__方法,還有其他一些以雙下劃線開頭和結尾的方法,都屬於專有方法,大概有
__init__ : 構造函數,在生成對象時調用
__del__ : 析構函數,釋放對象時使用
__repr__ : 打印,轉換
__setitem__ : 按照索引賦值
__getitem__: 按照索引獲取值
__len__: 獲得長度
__cmp__: 比較運算
__call__: 函數調用
__add__: 加運算
__sub__: 減運算
__mul__: 乘運算
__truediv__: 除運算
__mod__: 求餘運算
__pow__: 乘方
3.私有屬性和私有方法
在一個類裏定義屬性或者方法的時候,若以雙下劃線開頭,聲明是私有屬性或方法,不能在類的外部被使用或直接訪問
二、繼承
可以用A類繼承於B類,這樣B類所具有的屬性和方法A類也有,比如說student類繼承於human類,則human的name、age、say()等內容student類不用自己定義就有了,而且還能重寫父類的方法
class human: # 定義一個類
def __init__(self, name="someone", age=20):
self.name = name # 類屬性name
self.age = age # 類屬性age
def say(self): # 類方法,所有的類方法都至少有一個參數self
print("hello")
def think(self,a=1,b=2):
print(a+b)
# human1 = human("pan",30) # 實例化human類,得到對象human1
# print(human1.name) # 訪問對象的name屬性
# human1.say() # 調用對象的say()方法
# human1.think(a=2,b=3) # 調用對象的think()方法,並且傳入參數
class student(human):
def __init__(self, school="sxu", major="chem"): # 初始化類student
super().__init__("pan", 25) # 調用父類human的初始化方法
self.school = school
self.major = major
def think(self,a=1,b=2): # 重寫think()方法,父類用加法,這裏用乘法
print(a*b)
stu = student() # 實例化類得到對象stu
print(stu.name) # stu也有父類的name屬性
print(stu.school)
print(stu.major)
stu.major = "python" # 修改major屬性
print(stu.major)
stu.think(2, 3)