我們先來看看這個程式碼
class Computer:
screen = True
def start(self):
print('電腦正在開機中……')
my_computer = Computer()#範例化類
print(my_computer.screen)#列印類中的屬性值
my_computer.start()#啟動類中的方法
想要呼叫他語法是範例名.屬性和範例名.方法
所以說最後我們列印出的內容是
True
電腦正在開機中……
來看看怎麼才能使用類中的值:
my_computer.screen
範例名.屬性
這樣就可以呼叫類中的屬性了
my_computer.start()
範例名.方法
這樣就可以啟動類中的函數
看到這裡很多人也明白怎麼使用類了,可是發現類中函數有一個self引數這個引數有什麼作用呢?
接下來我們看
class Chinese:
name = '小張' # 類屬性name
def say(self, someone): # 帶有兩個引數的方法
print(someone + '是中國人')
person = Chinese()
print(person.name)
person.say('小張')
輸出的結果是:
小張
小張是中國人
為什麼忽略self,因為self會接收範例化過程中傳入的資料,當範例物件建立後,範例便會代替 self,self 是所有範例的替身,「替身」是什麼意思呢?就如上面這個程式碼一樣,傳參直接給了someone沒有給self,因為他被忽略了,但是他是存在的,因為沒有他,函數就不是範例化中的函數,所以大家只要記得在類中函數新增上self就行了。
self總結,self就是範例化類的意思,傳參時可以忽略。
我們接著走,細心的同學會發現,我們傳的引數小張給someone,然後再列印出 小張是中國人,其實我們沒必要這麼麻煩,直接看類的屬性中有小張的引數值,直接呼叫就好了
然後你們就會想到
class Chinese:
name = '小張' # 類屬性name
def say(self): # 帶有兩個引數的方法
print(name + '是中國人')
person = Chinese()
print(person.name)
person.say()
列印出來的結果
Traceback (most recent call last):
File "one.py", line 10, in <module>
person.say()
File "one.py", line 6, in say
print(name + '是中國人')
NameError: name 'name' is not defined
報錯找到不到name,為什麼呢?我上面不是寫了嘛?因為類裡面呼叫屬性需要先加範例化,那是不是寫Chinese().name是的,這樣寫沒有錯,但是我們沒必要這樣寫呢,我們上面說過self就是類的範例化,所以我們寫成self.name 就可以呼叫屬性了,
小總結:類的屬性呼叫前面加self.屬性名就可以了。self在類中就是Chinese(),我們完全可以把全部的self寫成Chinese(),有的人類的名字很長,寫程式碼時很不有好所以出現了self,帶代替的他的存在,傳參時也不會傳給他。
有同學又問,如果類裡面有兩個方法(函數)這麼辦?我下一個方法(函數)要呼叫上一個方法(函數)這麼呼叫,同理看下面的程式碼
class Chinese:
def greeting(self):
print('很高興遇見你')
def say(self):
self.greeting()
print('我來自中國')
person = Chinese()
# 建立範例person
person.say()
# 呼叫say()方法
我們只要在前面加上一個self(範例)就可以了。大家可以複製程式碼到編譯器看看。
綜上,所以我們說self代表的是類的範例本身,方便資料的流轉。對此,我們需要記住兩點:
第一點:只要在類中用def建立方法時,就必須把第一個引數位置留給 self,並在呼叫方法時忽略它(不用給self傳參)。
第二點:當在類的方法內部想呼叫類屬性或其他方法時,就要採用self.屬性名或self.方法名的格式。
接下來我們說說類中的初始化
定義初始化方法的格式是def init(self),是由init加左右兩邊的【雙】下劃線組成( initialize 「初始化」的縮寫)。
初始化方法的作用在於:範例物件建立時,該方法內的程式碼無須呼叫就會自動執行。
我們看下面的程式碼
class Chinese:
def __init__(self):
print('很高興遇見你,我是初始化方法')
person = Chinese()
執行出來的結果
很高興遇見你,我是初始化方法
少了一個呼叫的函數 person.__ init __()
為什麼呢?因為他時初始化,只要類的範例化建立出來就會自動執行,好比方說,你開啟電腦,他會自動載入C槽上的系統檔案,直到你開啟電腦桌面為止,剩下的才是你操作的內容,前面開啟電腦的過程都叫做類的初始化,自動執行了。
這時候有同學問,那我再初始化寫一些程式碼賦值給函數,能呼叫嗎?
在初始化中所有程式碼都是可以呼叫的,同理,在前面加一個self看下面的例子
class Chinese:
def __init__ (self):
self.mouth = 1 # self.不能丟
self.eye = 2
def body(self):
print('我有%s張嘴巴' % self.mouth)
print('我有%s隻眼睛' % self.eye)
person = Chinese()
person.body()
執行出來的結果就是
我有1張嘴巴
我有2隻眼睛
這樣大家應該也明白怎麼建立類,怎麼使用類的函數,怎麼呼叫類的函數了把,大家還有什麼不懂的問題可以方便留言在下方,我會更新檔案內容。喜歡的方便加關注點贊,感謝啦。