6-1 類的語法

參考: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)
結論:# 在訪問變量的時候,都先使用本身命名空間中的,若是本身的空間中沒有,再到類的空間中去找# 在使用對象修改靜態變量的過程當中,至關於在本身的空間中建立了一個新的變量# 在類的靜態變量的操做中  應該使用類名來直接進行操做 就不會出現烏龍問題
相關文章
相關標籤/搜索