1 ## 類 2 ''' 3 在面向對象編程中,你編寫表示現實世界中的事物和情景的類,並基於這些類來創建對象。 4 編寫類時,你定義一大類對象都有的通用行為。基於類創建 對象時,每個對象都自動具備 5 這種通用行為,然後可根據需要賦予每個對象獨特的個性。 6 7 根據類來創建對象被稱為 實例化,這讓 ...
1 ##------------------------類-------------------- 2 ''' 3 在面向對象編程中,你編寫表示現實世界中的事物和情景的類,並基於這些類來創建對象。 4 編寫類時,你定義一大類對象都有的通用行為。基於類創建 對象時,每個對象都自動具備 5 這種通用行為,然後可根據需要賦予每個對象獨特的個性。 6 7 根據類來創建對象被稱為 實例化,這讓你能夠使用類的實例。你將指定可在實例中存儲什 8 麽信息,定義可對這些實例執行哪些操作。你還將編寫一些類來擴展既有類的功能,讓相似 9 的類能夠高效地共用代碼。你將把自己編寫的類存儲在模塊中,併在自己的程式文件中導入 10 其他程式員編寫的類。 11 ''' 12 ##總而言之,類像是一個模板,實例化就是根據模板做好的成品 13 ##創建和使用類 14 15 class Dog(): 16 def __init__(self,name,age): 17 '''初始化屬性name和age''' 18 self.name=name 19 self.age=age 20 21 def sit(self): 22 '''模擬小狗被命令時蹲下''' 23 print(str(self.name.title())+'蹲下!') 24 25 def roll_over(self): 26 '''模擬小狗被命令時打滾''' 27 print(str(self.name.title())+'打滾!') 28 29 ##實例化一個對象my_dog 30 my_dog=Dog('阿爾法',5) 31 ##訪問屬性 32 print('我的小狗的名字叫做:'+my_dog.name.title()) 33 print(my_dog.name.title()+'今年已經有'+str(my_dog.age)+'歲了!') 34 ##調用類中的方法(函數) 35 my_dog.sit() 36 my_dog.roll_over() 37 ##創建多個實例: 38 #可按需求根據類創建任意數量的實例。 39 your_dog=Dog('貝塔',3) 40 your_dog.roll_over() 41 42 43 44 -------------------------------------------------------------------- 45 46 class Car(): 47 '''一次模擬汽車的簡單嘗試''' 48 def __init__(self,make,model,year,color): 49 '''初始化汽車的屬性''' 50 self.make=make 51 self.model=model 52 self.year=year 53 self.color=color 54 self.odometer_reading=10##給定的預設值 55 def get_descriptive_name(self): 56 '''返回整潔的描述信息''' 57 long_name=str(self.year)+',由'+self.make+'公司'+'生產的'+self.model+self.color+'型號車的性能相當出色!' 58 return long_name.title() 59 def read_odometer(self): 60 '''列印汽車的里程數''' 61 print('這輛'+str(self.model)+'車已經行駛了'+str(self.odometer_reading)+'公裡!') 62 63 #屬性值的更新方法2: 64 def update_odomenter(self,mileage): 65 #擴展:禁止里程數回調 66 if mileage>=self.odometer_reading: 67 self.odometer_reading=mileage 68 else: 69 print('操作非法,拒絕!') 70 71 def increment_odometer(self,miles): 72 '''將里程錶讀數增加指定的量''' 73 self.odometer_reading+=miles 74 my_new_car=Car('GWC','悍馬H2',2008,'銀黑色') 75 print(my_new_car.get_descriptive_name()) 76 print(str(my_new_car.read_odometer())) 77 ##修改屬性的值: 78 #1.直接修改屬性的值 79 my_new_car.odometer_reading=200##通過實例化對象直接訪問並修改 80 my_new_car.read_odometer() 81 82 #2.通過方法修改屬性的值 83 my_new_car.update_odomenter(300)##更新屬性odometer_reading的值 84 my_new_car.read_odometer() 85 #3.通過方法對屬性的值進行遞增 86 ''' 87 有時候需要將屬性值遞增特定的量,而不是將其設置為全新的值。假設我們購買了一輛二手 88 車,且從購買到登記期間增加了100英里的里程,下麵的方法讓我們能夠傳遞這個增量,並相 89 應地增加里程錶讀數: 90 ''' 91 my_new_car=Car('上海一汽','大眾',2017,'銀色') 92 print(my_new_car.get_descriptive_name()) 93 my_new_car.update_odomenter(2000) 94 my_new_car.read_odometer() 95 96 my_new_car.increment_odometer(100) 97 my_new_car.read_odometer() 98 99 100 ##-----------繼承--------------- 101 class ElectricCar(Car): 102 '''電動汽車''' 103 def __init__(self,make,model,year,color): 104 '''初始化父類的屬性''' 105 super().__init__(make,model,year,color) 106 107 108 109 my_tesla=ElectricCar('雅迪','雅迪電動車','2019','紅色') 110 print(my_tesla.get_descriptive_name()) 111 my_tesla.read_odometer()##//通過繼承來的方法訪問父類創建的預設值 112 ''' 113 pythin2.7繼承方法 114 115 class Car(object): 116 def __init__(self, make, model, year): 117 -- snip -- 118 119 class ElectricCar(Car): 120 def __init__(self, make, model, year): 121 super(ElectricCar, self).__init__(make, model, year) 122 ''' 123 ##給子類定義屬性和方法 124 class Bus(Car): 125 '''公交汽車''' 126 def __init__(self,make,model,year,color): 127 '''初始化父類的屬性''' 128 super().__init__(make,model,year,color) 129 self.battery_size=100##電瓶容量 130 131 def display_battery_size(self): 132 print('這輛'+str(self.model)+'的容量是'+str(self.battery_size)) 133 134 #重寫父類的方法 135 def read_odometer(self): 136 print('此公交汽車已經行駛:'+str(self.odometer_reading)+'公裡!') 137 my_bus=Bus('天津一汽','2019-公交車','2019','墨綠色') 138 bus_massage=my_bus.get_descriptive_name() 139 print(bus_massage) 140 my_bus.display_battery_size() 141 ##調用重寫父類的方法 142 my_bus.odometer_reading+=10 143 my_bus.read_odometer() 144 145 146 ##將實例化的對象用作屬性 147 ''' 148 使用代碼模擬實物時,你可能會發現自己給類添加的細節越來越多:屬性和方法清單以及文 149 件都越來越長。在這種情況下,可能需要將類的一部分作為一個獨立的類提取出來。你可以將大 150 型類拆分成多個協同工作的小類。 151 ''' 152 class bearing(): 153 def __init__(self,name='30mm軸承',materials='碳性鋼'): 154 '''初始化軸承的屬性''' 155 self.name=name 156 self.materials=materials 157 158 def read_property(self): 159 '''返回整潔的描述信息''' 160 print(str(self.name)+'的材質是'+str(self.materials)+'打造的') 161 162 class private_car(Car): 163 '''私家車的屬性''' 164 def __init__(self,make,model,year,color): 165 super().__init__(make,model,year,color) 166 self.number_of_passengers=4##可乘坐人數 167 self.Bearing=bearing() 168 def print_pricate_car_massage(self): 169 print('屬性:'+'\n\t廠家:'+str(self.make)+'\n\t名稱:'+str(self.model)+'\n\t生產日期:'+str(self.year)+'\n\t顏色:'+str(self.color)) 170 print('載客量為:'+str(self.number_of_passengers)) 171 172 my_private_car=private_car('上海一汽','寶馬',2020,'藍色') 173 my_private_car.print_pricate_car_massage() 174 my_private_car.bearing.read_property() 175 176 ##導入單個類(假設統計目錄下的hello.py文件中有個hello_friend的類) 177 from hello import hello_friend 178 ##在一個模塊中存儲多個類 179 '''雖然同一個模塊中的類之間應存在某種相關性,但可根據需要在一個模塊中存儲任意數量的類。''' 180 ##從一個模塊中導入多個類(類與類之間用逗號隔開) 181 from hello import hello_friend,hello_teacher 182 183 ##導入整個模塊 184 '''還可以導入整個模塊,再使用句點表示法訪問需要的類。這種導入方法很簡單,代碼也易 185 於閱讀。由於創建類實例的代碼都包含模塊名,因此不會與當前文件使用的任何名稱發生衝突。''' 186 import hello 187 188 189 ##導入模塊中的所有類,要導入模塊中的每個類,可使用下麵的語法: 190 from module_name import *