1. 程式人生 > >#Python3中類Class和物件obje

#Python3中類Class和物件obje

Python3中類Class和物件obje

類 是什麼
類是一個抽象的概念,泛指很多相似的個體組成的,具有共同特徵的事物。 比如類是一個車
,這車就包括各種車型
什麼是物件
類裡面的具體的一個事物。 比如 五菱神車S(過彎秒掉GTR的梗還記憶猶新) ,他是車這個類的具體化,
先有類,才有物件

理解類和物件

def eating():
    print("吃草")
    
def walking():
    print("走路")

eating()
walking()
#(輸出)	吃飯
		走路
	
#這樣的話,別人也可以呼叫你寫的函式,但是呼叫eating() 並不能清除的瞭解到到底是誰 “吃飯”,
#所以我們輸入一個name來明確是誰在吃草。

def eating
(name): print(name,"吃飯") eating("zhuozi") #呼叫函式 #(輸出)zhuozi 吃草

#但是你會發現 zhuozi用來吃飯,從邏輯上來說是否有點不妥,雖然他語法上沒問題,
#所以我們將進行一個歸類,將“吃飯”的一類 分為一類,也就是類別,所以我們將它進行標記,class Person:
#為什麼P大寫是用來和Python內建函式的類作區別,內建的類名都是小寫字母(可以ctrl + 滑鼠左鍵點選內建函式檢視)

class Person:			#這樣我們就將eating封裝到了Person這個類裡面
                        #只要是Person這一類別的都可以進行下面的行為(eating)
    def eating
(name): print(name,"吃飯") zhangsan = Person() #這裡就不能像以前一樣用eating去呼叫了,因為只有Person這一類的才能就行eating這個行為 #所以我們就要先將zhansan定義為Person這一類 zhangsan.eating() #然後才能讓張三進行吃草這種行為 #(輸出)<__main__.Person object at 0x000001D2CCC21160> 吃飯 lisi = Person() #lisi也要吃飯,那繼續定義lisi 是person 類 他可以吃飯 lisi.eating
() #lisi就可以吃飯了 #(輸出)<__main__.Person object at 0x000001BCC6BF1198> 吃飯 #列印的一個地址,一個類的地址 object(翻譯就是物件)就表示 lisi是這個類的物件 #lisi 就是 Person這個類 例項化的物件。

之前我們 def eating(name):的name 就是可以看做誰進行 eating ,而這裡語法的硬性要求就是用self 來代表到底是誰來呼叫 eating。所以如下:

class Person:
    def eating(self):
        print(self,"吃飯")
class Person:
    pass
========
list  這裡我們ctrl + 滑鼠左鍵點選pycharm 裡面書寫的list,如圖:

在這裡插入圖片描述
可以看出內建的函式的類名都是小寫的,而以前我們用的類 (列表名).append() 也就是我們現在講的類下面的函式的呼叫,括號裡面的就是物件名self 而列表名就是例項化的物件。

語法

class 類名(父類列表):		#類名和變數名稱的命名是一樣的,類名首字母要大寫,
							#用來區別是否是內建函式自帶的類
	類體
	
資料屬性						#類的共同屬性,名字,性別,幹什麼的,等等

方法屬性						#這個類共同都有的功能,跑,跳,計算,記錄等等
class Person:
    pass

zhangsan = Person()				#張三是Person例項化的物件,所以要開闢一個記憶體來儲存,
								#即將zhangsan變數名指向這個記憶體地址
print(zhangsan)
#(輸出)<__main__.Person object at 0x00000194D8D28400>

既然例項化物件後開闢了記憶體,我們就要在裡面進行一個儲存

class Person:
    pass

zhangsan = Person()
zhangsan.name = "zhangsan"				#給這個例項化的物件附一個名字
print(zhangsan)
#(輸出)<__main__.Person object at 0x0000018DF6598400>

print(zhangsan.name)					#打印出這個物件的名字
#(輸出)zhangsan

zhangsan物件名 指向  記憶體,記憶體裡面有一個屬性name,而name指向zhangsan這個名字  兩個zhngsan 不一樣啊
zhangsan(類的物件名字)  -- 》記憶體 (name)----》zhangsan(物件的屬性)

lisi = Person()					#再例項化一個物件
lisi.name = "xiaolong"
print(lisi.name)	
print(id(lisi.name))			
lisi = Person()
lisi.name = "xiaolong"

print(id(zhangsan))
#(輸出)2070146453856
print(lisi.name)
#(輸出)xiaolong
print(id(lisi.name))
#(輸出)2070146521264

可以看出兩個例項化的物件的id是不同的
這裡就引出了名稱空間規則:
每例項化出來一個物件,如果沒進行特別的處理的話都會佔用系統單獨的記憶體儲存。

class Person:
    pass

zhangsan = Person()					
zhangsan.name = "zhangsan"
zhangsan.sex = "男"
zhangsan.age = 19
zhangsan.hight = 175

lisi = Person()
lisi .name = "xiaolong"
lisi .sex = "女"
lisi .age = 29
lisi .hight = 170
#兩個內容的建立方式相同啊,只是內容不同,那麼我們寫一個函式來進行這種重複性的操作,
class Person:
    def __init__(self, name, sex, age, hight):
        self.name = name		zhangsan.name = name
        self.sex = sex			zhangsan.name = sex
        self.age = age			zhangsan.name = age
        self.hight = hight		zhangsan.name = hight
#self 是為了規範明確是誰呼叫了,所以相當於將zhangsan這個物件傳給了self。
#而後面self之後的name, sex, age, hight 就是所要傳入的"zhangsan" "男"19 175 資訊
#zhangsan = Person()				
#zhangsan.name = "zhangsan"
#zhangsan.sex = "男"
#zhangsan.age = 19
#zhangsan.hight = 175

這樣我們就不用再像上面一樣傳入了
zhangsan = Person("zhangsan","男","19",175)
print(zhangsan.name)
#(輸出)zhangsan

init:是系統所存在的特殊函式,當我們例項化物件的時候(zhangsan = Person(“zhangsan”,“男”,“19”,175)),預設例項化物件進行呼叫這個函式。 def init(self, name, sex, age, hight):
self物件名為 等號 前面的zhangsan,
而name, sex, age, hight 對應"zhangsan",“男”,“19”,175