摘要:的名字并不是規定死的因為是形參,也可以使用,但是最好還是按照約定是用。類的私有方法兩個下劃線開頭,聲明該方法為私有方法,只能在類的內部調用,不能在類地外部調用。。
類
面向對象編程具有三大特性:多態、繼承、封裝
定義:是一個抽象的模板
對象:類實例化
屬性:這個類實例化后的對象具有的特征
方法:類對象可以執行的函數
class 類名
class People(object): # object代表是, 人類繼承于哪一個類, 如果不知道繼承哪個類, 就寫object; # 構造方法(魔術方法), 當創建對象的時候, 自動執行的函數 def __init__(self, name, age, gender): # python解釋器自動將對象傳給self這個形參. # 看self到底是什么東西? # 將對象與該對象的屬性綁定在一起. # 調用對象的屬性兩種方式: # - Tom.name # - self.name self.name = name # 屬性 self.age = age # 屬性 self.gender = gender # 屬性 # print(self) # 實質上是一個對象, <__main__.People object at 0x0000024111324630> # 方法(在類里面定義的函數, 叫做方法) def eat(self): print("%s 正在吃飯..." %(self.name)) # 創建對象====根據模板(類)創建對象(真實存在) Tom = People("Tom Smith", 10, "male") #測試 # 看對象的屬性 print(Tom.name) print(Tom.age) print(Tom.gender) # 讓對象執行方法 Tom.eat()私有屬性和私有方法
1).類的私有屬性: __private_attrs:兩個下劃線開頭,聲明該屬性為私有, 不能在類地外部被使用或直接訪問。 在類內部的方法中使用時 self.__private_attrs。 2).類的方法: 在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同, 類方法必須包含參數 self,且為第一個參數,self 代表的是類的實例。 self 的名字并不是規定死的(因為是形參),也可以使用 this,但是最好還是按照約定是用 self。 3).類的私有方法 __private_method:兩個下劃線開頭,聲明該方法為私有方法,只能在類的內部調用 , 不能在類地外部調用。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("王者榮耀正在進行時......") p1 = People("user1", 10, "male", 1000000) print(p1.gender) p1.__play()#報錯,AttributeError: "People" object has no attribute "__play"棧數據結構
棧的方法有入棧(push), 出棧(pop), 棧頂元素(top),棧的長度(lenght), 判斷棧是否為空(isempty),顯示棧元素(view) 操作結果: 棧類的實例化 入棧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): #當子類沒有的屬性和方法,會到父類里面找。如果父類有沒有,就會報錯 #父類的私有屬性和私有方法,子類不能查看與操作 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()多繼承
# 經典類 class Person1: pass p1 = Person1() print(p1) # 新式類 class Person2(object): pass p2 = Person2() print(p2)
在python2中既有新式類也有經典類;
經典類的繼承算法: 深度優先算法 新式類的繼承算法: 廣度優先算法,同級優先
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()烏龜吃魚
游戲編程:按以下要求定義一個烏龜類和魚類并嘗試編寫游戲 假設游戲場景為范圍(x,y)為0<=x<=10,0<=y<=10 游戲生成1只烏龜和10條魚 它們的移動方向均隨機 烏龜的最大移動能力為2(它可以隨機選擇1還是2移動),魚兒的最大移動能力是1 當移動到場景邊緣,自動向反方向移動 烏龜初始化體力為100(上限) 烏龜每移動一次,體力消耗1 當烏龜和魚坐標重疊,烏龜吃掉魚,烏龜體力增加20 魚暫不計算體力 當烏龜體力值為0(掛掉)或者魚兒的數量為0游戲結束
import random class Animals(object): def __init__(self): # 隨機生成動物的坐標 self.x = random.randint(0, 10) self.y = random.randint(0, 10) def move(self, move_skill): # 計算出烏龜新的坐標; (10,0) (12,0) new_x = self.x + random.choice(move_skill) # 12 new_y = self.y + random.choice(move_skill) # 0 # 更新烏龜的坐標值 self.x = self.is_vaild(new_x) self.y = self.is_vaild(new_y) def is_vaild(self, value): # 12 """判斷坐標值是否合法(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): # 構造函數何時執行? 類實例化對象(創建對象)時, 自動調用該函數內容 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) # 烏龜每移動一次,體力消耗1 self.power -= 1 def eat(self): # 當烏龜和魚坐標重疊,烏龜吃掉魚,烏龜體力增加20 if self.power>80: self.power =100 else: self.power +=20 class Fish(Animals): def move(self, move_skill = (-1, 0, 1 )): # 魚的最大移動能力為1 super(Fish, self).move(move_skill) def start_game(): # 創建一個烏龜 t1 = Trutle() # 創建10個魚 # fishs = [] # for i in range(10): # fishs.append(Fish()) fishs = [Fish() for i in range(10)] # 游戲開始運行 while True: # 判斷游戲是否結束(烏龜沒體力或者魚被吃光了) if t1.power <= 0: print("烏龜沒體力了, Game over.........") break elif len(fishs) == 0: print("魚被吃光了, Game over......... ") break else: # 烏龜和魚隨機移動 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)) # 當烏龜的坐標與每一條魚進行比較, 都沒有重合, 也就是沒有遲到一條魚; else: print("烏龜沒有吃到魚, 最新體能為%s" %(t1.power)) # 如果這個腳本(模塊), 沒有被調用, 則執行下面的代碼 if __name__ == "__main__": print("游戲開始".center(50, "*")) start_game()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42366.html
摘要:是建立可靠連接,并且通信雙方都可以以流的形式發送數據。相對,則是面向無連接的協議。測試結果用兩個命令行分別啟動服務器和客戶端測試開啟服務端完成一次通信 UDP TCP是建立可靠連接, 并且通信雙方都可以以流的形式發送數據。 相對TCP, UDP則是面向無連接的協議。使用UDP協議時, 不需要建立連接, 只需要知道對方的IP地址和端口號, 就可以直接發數據包。 但是, 能不能到達就不知道...
摘要:我們來編寫一個簡單的服務器程序,它接收客戶端連接,回復客戶端發來的請求。如果一切順利,新浪的服務器接受了我們的連接,一個連接就建立起來的,后面的通信就是發送網頁內容了。 TCP TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,由IETF的RFC 793定義。在簡化的計算機網絡OSI模型中,它完成第四...
摘要:使用對象關系映射框架,它將低層的數據庫操作指令抽象成高層的面向對象操作。在中,數據庫使用指定。安裝對數據庫操作如何創建數據庫操作連接為了創建初始數據庫,調用方法來創建表和數據庫您的數據庫已經生成。最為常見的關系就是一對多的關系。 flask_sqlalchemy 使用對象關系映射(Object-Relational Mapper, ORM)框架,它將低層的數據庫操作指令抽象成高層的面向...
閱讀 1071·2023-04-25 14:35
閱讀 2832·2021-11-16 11:45
閱讀 3423·2021-09-04 16:48
閱讀 2187·2021-08-10 09:43
閱讀 534·2019-08-30 13:17
閱讀 1627·2019-08-29 13:27
閱讀 892·2019-08-26 13:58
閱讀 2158·2019-08-26 13:48