參考:https://www.cnblogs.com/Eva-J/articles/7293890.html
一 類的概念和格式
1 概念
# 類 : 具備相同屬性和相同動做的一類事物 組成一個類,如人類
# 對象 : 具體的某一個具備實際屬性 和具體動做的一個實體。如蜘蛛俠就是一個對象
# 類是抽象的
# 對象是具體的
2 例子
類的第一個功能,類被創造出來 就是模子 是用來描述對象的
1 class 類名: 2 靜態屬性 = 123 3 def 動態屬性(self): 4 # 在類中的方法的一個默認的參數,但也只是一個形式參數,約定必須叫self 5 print('-->',self) 6 print(類名.靜態屬性)#查看靜態屬性 7 類名.靜態屬性=456 8 print(類名.靜態屬性) #修改靜態屬性 9 類名.靜態屬性2='abc' #增長靜態屬性 10 print(類名.靜態屬性2) 11 del 類名.靜態屬性2 #刪除靜態屬性 12 13 print(類名.動態屬性) 14 類名.動態屬性("我要把1傳給動態屬性self") #這個1傳給了self 15 #print(類名.靜態屬性2)
#類的第二個功能實例化(創造一個具體的對象)
1 class Person:pass 2 alex=Person() #對象=類名() 也叫實例化 3 print(alex) #對象 4 print(Person) #類 5 print(alex.__dict__) #默認是空字典 6 alex.__dict__['name']='alex' # 給alex對象添加屬性 7 alex.sex='男' #給alex對象添加屬性 8 print(alex.__dict__)
3 實例化的過程html
# 類名()就是實例化
# 在實例化的過程當中 發生了不少事情是外部看不到的
# 1.建立了一個對象
# 2.自動調用__init__方法
# 這個被創造的對象會被當作實際參數傳到__init__方法中,而且傳給第一個參數self
# 3.執行init方法中的內容
# 4.自動的把self做爲返回值 返回給實例化的地方函數
1 實例化的過程 2 3 class Person: 4 # def __init__(self,name,hp,dps,sex): 5 # self.name = name 6 # self.hp = hp 7 # self.dps = dps 8 # self.sex = sex 9 # self.bag = [] 10 # 11 # alex = Person('alex',250,5,'N/A') 12 # print('alex : ',alex) 13 # print(alex.__dict__) 14 # print(alex.name)
4 實例spa
人狗大戰code
1 class Person: 2 def __init__(self,name,sex,dps,hp): 3 self.name=name 4 self.sex=sex 5 self.dps=dps 6 self.hp=hp 7 def attack(self,dog): # 人打狗 8 dog.hp-=self.dps 9 print('%s打了%s,%s還剩%s點血'% (self.name,dog.name,dog.name,dog.hp)) 10 11 class Dog: 12 13 def __init__(self,name,kind,hp,dps): 14 self.name=name 15 self.kind=kind 16 self.hp=hp 17 self.dps=dps 18 def bite(self,person):#狗咬人 19 person.hp -= self.dps 20 print('%s咬了%s,%s還剩%s點血'% (self.name,person.name,person.name,person.hp)) 21 22 alex = Person('alex','男',250,5) 23 ha2 = Dog('小白','藏獒',1000,200) 24 ha2.bite(alex) 25 #alex.attack(ha2) #第一種寫法 26 # 對象名.方法名 至關於調用一個函數,默認把對象名做爲第一個參數傳入函數 alex調用了attack函數 27 Person.attack(alex,ha2)#第二種寫法 28 print(ha2.hp)
計算園的面積和周長
1 # from math import pi 2 # class Yuan: 3 # def __init__(self,r): 4 # self.r=r 5 # def Yuan_mianji(self): 6 # 7 # return pi *self.r **2 8 # def Yuan_zc(self): 9 # 10 # return pi * 2*self.r 11 # yuan = Yuan(3) 12 # mj=yuan.Yuan_mianji() 13 # #mj1=Yuan.Yuan_mianji(yuan) 14 # zc=yuan.Yuan_zc() 15 # print('我是面積%s\n我是周長%s'%(mj,zc))
5 命名空間htm
# 類有本身的命名空間
# 對象也有本身的命名空間
# 對象能訪問類的命名空間
# 類不能訪問對象的命名空間
1 class Person: 2 COUNTRY = ['中國人'] # 靜態屬性 3 country = '中國人' 4 def __init__(self,name): 5 self.name = name 6 def eat(self): 7 print('%s在吃泔水'%self.name) 8 alex = Person('alex') 9 egon = Person('egon') 10 # print(alex.name) 11 # print(alex.country) 12 # alex.country='印度人' #這個只是在alex這個對象裏面生效 13 # print(alex.country) 14 # print(egon.country) 15 # print(Person.country) # Person裏面的沒有改過來 16 # alex.COUNTRY[0] = '印度人' # 改的是列表裏面的元素 17 # print(alex.COUNTRY) 18 # print(egon.COUNTRY) 19 # print(Person.COUNTRY) 20 alex.COUNTRY=['印度人'] 21 print(egon.COUNTRY) #中國人 22 print(Person.COUNTRY) #中國人 23 print(alex.COUNTRY)
結論:# 在訪問變量的時候,都先使用本身命名空間中的,若是本身的空間中沒有,再到類的空間中去找# 在使用對象修改靜態變量的過程當中,至關於在本身的空間中建立了一個新的變量# 在類的靜態變量的操做中 應該使用類名來直接進行操做 就不會出現烏龍問題