面象對象語法
阿新 • • 發佈:2018-06-01
輸出 CA 現實 sleep list IV 語法 而且 第一個
類
- 類:就是一系列對角相似的特征與技能的結合體,但站在不同的角度,得到的分類也是不同的
在現實中:先有對象,才有類
在程序中:一定先定義類,後調用類來產生對象
‘‘‘ 在現實世界中: 對象1:王二丫 特征: 學校=‘luffycity‘ 名字=‘王二丫‘ 性別=‘女‘ 年齡=18 技能: 學習 吃飯 睡覺 對象2:李三炮 特征: 學校=‘luffycity‘ 名字=‘李三炮‘ 性別=‘男‘ 年齡=38 技能: 學習 吃飯 睡覺 對象3:張鐵蛋 特征: 學校=‘luffycity‘ 名字=‘張鐵蛋‘ 性別=‘男‘ 年齡=48 技能: 學習 吃飯 睡覺 總結現實中路飛學院的學生類: 相似的特征 學校=‘luffycity‘ 相似的技能 學習 吃飯 睡覺 ‘‘‘ #定義類 class LuffyStudent(): school = ‘luffycity‘ #類的數據屬性 def learn(self):#類的函數屬性 pass def eat(self): pass def sleep(self): pass #產生對象 stu1 = LuffyStudent() stu2 = LuffyStudent() stu3 = LuffyStudent() #查看類的名稱空間 # print(LuffyStudent.__dict__) #查 print(LuffyStudent.school) #增 # LuffyStudent.county = ‘China‘ # print(LuffyStudent.county) #刪 # del LuffyStudent.county # print(LuffyStudent.county) #改 LuffyStudent.school = ‘Luffycity‘ print(LuffyStudent.school)</pre>
__init__方法
__init__方法主要用來為對象定制對象獨有的特性
#定義類 class LuffyStudent(): school = ‘luffycity‘ def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def learn(self): print(‘is learn‘) def eat(self): print(‘is eat‘) def sleep(self): print(‘is sleep‘) #產生對象 stu1 = LuffyStudent(‘王二丫‘,29,‘女‘) #先調用類產生空對象stu1,然後調用LuffyStudent.__init__(stu1,‘王二丫‘,29,‘女‘) stu2 = LuffyStudent(‘張三‘,18,‘男‘) stu3 = LuffyStudent(‘李四‘,28,‘女‘) #查 # print(stu1.age) # #刪 # del stu1.age # print(stu1.age) #增 stu1.class_name = ‘Python開發‘ print(stu1.class_name) print(stu1.__dict__) #改 stu1.age = 19 print(stu1.age)
屬性查找
類有兩種屬性:
* 類的數據屬性,屬於對象共用的
print(id(stu1.school))
print(id(stu2.school))
print(id(stu3.school))
#輸出
2336910776112
2336910776112
2336910776112
* 類的函數屬性是綁定給對象使用的,稱為綁定對象的方法
print(LuffyStudent.sleep) print(stu1.sleep) print(stu3.sleep) print(stu2.sleep) #輸出 <function LuffyStudent.sleep at 0x000001EAB2BAAD90> <bound method LuffyStudent.sleep of <__main__.LuffyStudent object at 0x000001EAB2BCC780>> <bound method LuffyStudent.sleep of <__main__.LuffyStudent object at 0x000001EAB2BCC828>> <bound method LuffyStudent.sleep of <__main__.LuffyStudent object at 0x000001EAB2BCC7F0>>
查找順序
在obj.name會先從obj自己的名稱空間裏找name,找不到則去類中找,類也找不到就去父類裏找,父類找不到就報錯了
綁定方法
- 類中定義的函數(沒有被任何裝飾器裝飾的),其實主要是給對象使用的,而且是綁定到對象的,雖然所有對象指向的都是相同的功能,但是綁定到不同的對象就是不同的綁定方法
- 綁定到對象的方法的特殊之處在於,綁定給誰就由誰來調用,誰來調用,就會將‘誰’本身當做第一個參數傳給方法,即自動傳值(方法__init__也是一樣的道理)
在Python中一切皆對象,且python3中類與類型是一個概念,類型就是類
練習
練習1:編寫一個學生類,產生一堆學生對象, (5分鐘)
要求:
- 有一個計數器(屬性),統計總共實例了多少個對象
class Student:
school = ‘luffycity‘
cont = 0
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
Student.cont += 1
def learn(self):
pass
stu1 = Student(‘張三‘,18,‘男‘)
stu2 = Student(‘李四‘,18,‘男‘)
stu3 = Student(‘王五‘,18,‘男‘)
print(Student.cont)
練習2:模仿王者榮耀定義兩個英雄類, (10分鐘)
要求:
- 英雄需要有昵稱、攻擊力、生命值等屬性;
- 實例化出兩個英雄對象;
- 英雄之間可以互毆,被毆打的一方掉血,血量小於0則判定為死亡。
class zhugeliang:
camp = ‘red‘
def __init__(self,nickname,life_value,aggresivity):
self.nickname = nickname
self.life_value = life_value
self.aggresivity = aggresivity
def attack(self,enemy):
enemy.life_value -= enemy.aggresivity
if enemy.life_value <= 0:
print(‘%s已死亡!‘%enemy.nickname)
class xiaoqiao:
camp = ‘blue‘
def __init__(self,nickname,life_value,aggresivity):
self.nickname = nickname
self.life_value = life_value
self.aggresivity = aggresivity
def attack(self,enemy):
enemy.life_value -= enemy.aggresivity
if enemy.life_value <= 0:
print(‘%s已死亡!‘ % enemy.nickname)
r1 = zhugeliang(‘諸葛亮‘,200,100)
g1 = xiaoqiao(‘小喬‘,300,90)
g1.attack(r1)
g1.attack(r1)
面象對象語法