摘要:的名字并不是規(guī)定死的因?yàn)槭切螀ⅲ部梢允褂?,但是最好還是按照約定是用。類的私有方法兩個(gè)下劃線開頭,聲明該方法為私有方法,只能在類的內(nèi)部調(diào)用,不能在類地外部調(diào)用。。
類
面向?qū)ο缶幊叹哂腥筇匦裕憾鄳B(tài)、繼承、封裝
定義:是一個(gè)抽象的模板
對(duì)象:類實(shí)例化
屬性:這個(gè)類實(shí)例化后的對(duì)象具有的特征
方法:類對(duì)象可以執(zhí)行的函數(shù)
class 類名
class People(object): # object代表是, 人類繼承于哪一個(gè)類, 如果不知道繼承哪個(gè)類, 就寫object; # 構(gòu)造方法(魔術(shù)方法), 當(dāng)創(chuàng)建對(duì)象的時(shí)候, 自動(dòng)執(zhí)行的函數(shù) def __init__(self, name, age, gender): # python解釋器自動(dòng)將對(duì)象傳給self這個(gè)形參. # 看self到底是什么東西? # 將對(duì)象與該對(duì)象的屬性綁定在一起. # 調(diào)用對(duì)象的屬性兩種方式: # - Tom.name # - self.name self.name = name # 屬性 self.age = age # 屬性 self.gender = gender # 屬性 # print(self) # 實(shí)質(zhì)上是一個(gè)對(duì)象, <__main__.People object at 0x0000024111324630> # 方法(在類里面定義的函數(shù), 叫做方法) def eat(self): print("%s 正在吃飯..." %(self.name)) # 創(chuàng)建對(duì)象====根據(jù)模板(類)創(chuàng)建對(duì)象(真實(shí)存在) Tom = People("Tom Smith", 10, "male") #測(cè)試 # 看對(duì)象的屬性 print(Tom.name) print(Tom.age) print(Tom.gender) # 讓對(duì)象執(zhí)行方法 Tom.eat()私有屬性和私有方法
1).類的私有屬性: __private_attrs:兩個(gè)下劃線開頭,聲明該屬性為私有, 不能在類地外部被使用或直接訪問(wèn)。 在類內(nèi)部的方法中使用時(shí) self.__private_attrs。 2).類的方法: 在類的內(nèi)部,使用 def 關(guān)鍵字來(lái)定義一個(gè)方法,與一般函數(shù)定義不同, 類方法必須包含參數(shù) self,且為第一個(gè)參數(shù),self 代表的是類的實(shí)例。 self 的名字并不是規(guī)定死的(因?yàn)槭切螀?,也可以使用 this,但是最好還是按照約定是用 self。 3).類的私有方法 __private_method:兩個(gè)下劃線開頭,聲明該方法為私有方法,只能在類的內(nèi)部調(diào)用 , 不能在類地外部調(diào)用。self.__private_methods。
class People(object): def __init__(self,name,age,gender, money): self.name = name self.age = age self.gender = gender self.__money = money self.__play() def __play(self): print("王者榮耀正在進(jìn)行時(shí)......") p1 = People("user1", 10, "male", 1000000) print(p1.gender) p1.__play()#報(bào)錯(cuò),AttributeError: "People" object has no attribute "__play"棧數(shù)據(jù)結(jié)構(gòu)
棧的方法有入棧(push), 出棧(pop), 棧頂元素(top),棧的長(zhǎng)度(lenght), 判斷棧是否為空(isempty),顯示棧元素(view) 操作結(jié)果: 棧類的實(shí)例化 入棧2次 出棧1次 顯示最終棧元素
class Stack(object): def __init__(self): self.stack_list =[] def push(self,val): self.stack_list.append(val) return True def pop(self): self.stack_list.pop() return True def top(self): return self.stack_list[-1] def lenght(self): return len(self.stack_list) def isempty(self): return self.stack_list ==[] def view(self): return ",".join(self.stack_list) stack1 = Stack() stack1.push("3") stack1.push("4") print(stack1.view()) stack1.pop() print(stack1.view())第二特性之繼承
概念:
父類與子類/基類和派生類
class Anminal(object): def __init__(self,name,age): self.name = name self.age = age def eat(self): print("i"m hungry,i want to eat something~~~") class Dog(Anminal): def __init__(self,name,age,power): #當(dāng)子類沒(méi)有的屬性和方法,會(huì)到父類里面找。如果父類有沒(méi)有,就會(huì)報(bào)錯(cuò) #父類的私有屬性和私有方法,子類不能查看與操作 super(Dog, self).__init__(name,age) self.power =power def eat(self): super(Dog, self).eat() print("wang~~") H = Dog("大黃",6,100) print(H.power) print(H.name) print(H.age) H.eat()多繼承
# 經(jīng)典類 class Person1: pass p1 = Person1() print(p1) # 新式類 class Person2(object): pass p2 = Person2() print(p2)
在python2中既有新式類也有經(jīng)典類;
經(jīng)典類的繼承算法: 深度優(yōu)先算法 新式類的繼承算法: 廣度優(yōu)先算法,同級(jí)優(yōu)先
python3全部都是新式類;
def test(self): print("D test") class C(D): pass def test(self): print("C test") class B(D): pass #def test(self): # print("B test") class A(B,C): pass # def test(self): # print("A test") a = A() a.test()烏龜吃魚
游戲編程:按以下要求定義一個(gè)烏龜類和魚類并嘗試編寫游戲 假設(shè)游戲場(chǎng)景為范圍(x,y)為0<=x<=10,0<=y<=10 游戲生成1只烏龜和10條魚 它們的移動(dòng)方向均隨機(jī) 烏龜?shù)淖畲笠苿?dòng)能力為2(它可以隨機(jī)選擇1還是2移動(dòng)),魚兒的最大移動(dòng)能力是1 當(dāng)移動(dòng)到場(chǎng)景邊緣,自動(dòng)向反方向移動(dòng) 烏龜初始化體力為100(上限) 烏龜每移動(dòng)一次,體力消耗1 當(dāng)烏龜和魚坐標(biāo)重疊,烏龜吃掉魚,烏龜體力增加20 魚暫不計(jì)算體力 當(dāng)烏龜體力值為0(掛掉)或者魚兒的數(shù)量為0游戲結(jié)束
import random class Animals(object): def __init__(self): # 隨機(jī)生成動(dòng)物的坐標(biāo) self.x = random.randint(0, 10) self.y = random.randint(0, 10) def move(self, move_skill): # 計(jì)算出烏龜新的坐標(biāo); (10,0) (12,0) new_x = self.x + random.choice(move_skill) # 12 new_y = self.y + random.choice(move_skill) # 0 # 更新烏龜?shù)淖鴺?biāo)值 self.x = self.is_vaild(new_x) self.y = self.is_vaild(new_y) def is_vaild(self, value): # 12 """判斷坐標(biāo)值是否合法(0~10之間), 返回合法的值""" if value < 0: # eg: -2 == abs(-2) ==> 2 return abs(value) elif value > 10: # eg: 12 ====> 10-(12-10) ==> 8 return 10 - (value - 10) return value class Trutle(Animals): # 構(gòu)造函數(shù)何時(shí)執(zhí)行? 類實(shí)例化對(duì)象(創(chuàng)建對(duì)象)時(shí), 自動(dòng)調(diào)用該函數(shù)內(nèi)容 def __init__(self): super(Trutle, self).__init__() # 烏龜初始化體力為100(上限) self.power = 100 def move(self, move_skill = [-2, -1, 0, 1, 2]): super(Trutle, self).move(move_skill) # 烏龜每移動(dòng)一次,體力消耗1 self.power -= 1 def eat(self): # 當(dāng)烏龜和魚坐標(biāo)重疊,烏龜吃掉魚,烏龜體力增加20 if self.power>80: self.power =100 else: self.power +=20 class Fish(Animals): def move(self, move_skill = (-1, 0, 1 )): # 魚的最大移動(dòng)能力為1 super(Fish, self).move(move_skill) def start_game(): # 創(chuàng)建一個(gè)烏龜 t1 = Trutle() # 創(chuàng)建10個(gè)魚 # fishs = [] # for i in range(10): # fishs.append(Fish()) fishs = [Fish() for i in range(10)] # 游戲開始運(yùn)行 while True: # 判斷游戲是否結(jié)束(烏龜沒(méi)體力或者魚被吃光了) if t1.power <= 0: print("烏龜沒(méi)體力了, Game over.........") break elif len(fishs) == 0: print("魚被吃光了, Game over......... ") break else: # 烏龜和魚隨機(jī)移動(dòng) t1.move() for index, fish in enumerate(fishs): fish.move() # 判斷烏龜是否吃到了魚? if t1.x == fish.x and t1.y == fish.y: t1.eat() fishs.remove(fish) print("魚被吃掉, 還剩%d條魚......." %(len(fishs))) print("烏龜最新體能為%s" %(t1.power)) # 當(dāng)烏龜?shù)淖鴺?biāo)與每一條魚進(jìn)行比較, 都沒(méi)有重合, 也就是沒(méi)有遲到一條魚; else: print("烏龜沒(méi)有吃到魚, 最新體能為%s" %(t1.power)) # 如果這個(gè)腳本(模塊), 沒(méi)有被調(diào)用, 則執(zhí)行下面的代碼 if __name__ == "__main__": print("游戲開始".center(50, "*")) start_game()
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42366.html
摘要:是建立可靠連接,并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。相對(duì),則是面向無(wú)連接的協(xié)議。測(cè)試結(jié)果用兩個(gè)命令行分別啟動(dòng)服務(wù)器和客戶端測(cè)試開啟服務(wù)端完成一次通信 UDP TCP是建立可靠連接, 并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。 相對(duì)TCP, UDP則是面向無(wú)連接的協(xié)議。使用UDP協(xié)議時(shí), 不需要建立連接, 只需要知道對(duì)方的IP地址和端口號(hào), 就可以直接發(fā)數(shù)據(jù)包。 但是, 能不能到達(dá)就不知道...
摘要:我們來(lái)編寫一個(gè)簡(jiǎn)單的服務(wù)器程序,它接收客戶端連接,回復(fù)客戶端發(fā)來(lái)的請(qǐng)求。如果一切順利,新浪的服務(wù)器接受了我們的連接,一個(gè)連接就建立起來(lái)的,后面的通信就是發(fā)送網(wǎng)頁(yè)內(nèi)容了。 TCP TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四...
摘要:使用對(duì)象關(guān)系映射框架,它將低層的數(shù)據(jù)庫(kù)操作指令抽象成高層的面向?qū)ο蟛僮?。在中,?shù)據(jù)庫(kù)使用指定。安裝對(duì)數(shù)據(jù)庫(kù)操作如何創(chuàng)建數(shù)據(jù)庫(kù)操作連接為了創(chuàng)建初始數(shù)據(jù)庫(kù),調(diào)用方法來(lái)創(chuàng)建表和數(shù)據(jù)庫(kù)您的數(shù)據(jù)庫(kù)已經(jīng)生成。最為常見的關(guān)系就是一對(duì)多的關(guān)系。 flask_sqlalchemy 使用對(duì)象關(guān)系映射(Object-Relational Mapper, ORM)框架,它將低層的數(shù)據(jù)庫(kù)操作指令抽象成高層的面向...
閱讀 1315·2023-04-25 14:35
閱讀 2906·2021-11-16 11:45
閱讀 3516·2021-09-04 16:48
閱讀 2257·2021-08-10 09:43
閱讀 602·2019-08-30 13:17
閱讀 1694·2019-08-29 13:27
閱讀 986·2019-08-26 13:58
閱讀 2217·2019-08-26 13:48