《Python编程从入门到实践》第九章_类

系统管理员 2022-05-15 11:42 301阅读 0赞

《Python编程从入门到实践》_第九章_类

  1. class Pizza():
  2. """一次模拟小狗的尝试"""
  3. def __init__(self, name, age):
  4. """初始化属性name和age"""
  5. self.name = name
  6. self.age = age
  7. def sit(self):
  8. """模拟小狗被命令时蹲下"""
  9. print(self.name.title() + " is now sitting.")
  10. def roll_over(self):
  11. """模拟小狗被命令时打滚"""
  12. print(self.name.title() + " rolled over! ")
  13. my_dog = Pizza('atom',3)
  14. print("My dog's name is "+ my_dog.name.title() + ". ")
  15. print("My dog's age is " + str(my_dog.age) + " years old! ")
  16. print("创建多个实例")
  17. class Dog():
  18. """一次模拟小狗的简单尝试"""
  19. def __init__(self, name, age):
  20. """初始化属性name和age"""
  21. self.name = name
  22. self.age = age
  23. def sit(self):
  24. """模拟小狗被命令时蹲下"""
  25. print(self.name.title() + " now is sitting.")
  26. def roll_over(self):
  27. """模拟小狗被命令时打滚"""
  28. print(self.name.title() + " rolled over!")
  29. my_dog = Dog('tom', 3)
  30. your_dog = Dog('Mei', 2)
  31. print("My dog name is " + my_dog.name.title())
  32. print("Your dog name is " + your_dog.name.title())
  33. print("9.2使用类和实例")
  34. class Car():
  35. """一次模拟汽车的简单尝试"""
  36. def __init__(self, make, model, year):
  37. """汽车的初始化"""
  38. self.make = make
  39. self.model = model
  40. self.year = year
  41. self.odometer_reading = 100 # 给属性指定默认值
  42. def get_desci_name(self):
  43. """描述汽车"""
  44. long_name = str(self.year) + ' ' + self.model + ' ' + self.make
  45. return long_name
  46. def read_odometer(self):
  47. """打印一条指出汽车里程的消息"""
  48. print("This car has " + str(self.odometer_reading) + " miles on it ")
  49. # 通过方法修改属性的值
  50. def updata_odometer(self, mileage):
  51. """将里程表读数设置为指定的值"""
  52. # self.odometer_reading = mileage
  53. if mileage >= self.odometer_reading:
  54. self.odometer_reading = mileage
  55. else:
  56. print("You can't roll back an odometer")
  57. def increment_odometer(self, miles):
  58. """将里程表读数增加到指定的值"""
  59. self.odometer_reading += miles
  60. my_car = Car('audi', 'a4', 2017)
  61. print(my_car.model)
  62. print(my_car.get_desci_name())
  63. my_new_car = Car('audi', 'a4', 2016)
  64. my_new_car.read_odometer()
  65. print("9.2.3直接修改属性的值")
  66. print(my_new_car.get_desci_name())
  67. my_new_car.year = 2017
  68. print(my_new_car.get_desci_name())
  69. my_new_car.read_odometer()
  70. # 修改属性的值
  71. my_new_car.odometer_reading = 23 # 已经把里面属性值修改为23
  72. my_new_car.read_odometer()
  73. print("9.2.3通过方法修改")
  74. my_new_car.updata_odometer(10)
  75. print(my_new_car.get_desci_name())
  76. my_new_car.read_odometer()
  77. my_new_car.updata_odometer(120)
  78. print(my_new_car.get_desci_name())
  79. my_new_car.read_odometer()
  80. print("通过方法对属性的值进行递增")
  81. my_used_car = Car('sudo', 'outback', 2013)
  82. print(my_used_car.get_desci_name())
  83. my_used_car.updata_odometer(23500)
  84. my_used_car.read_odometer()
  85. my_used_car.increment_odometer(100)
  86. my_used_car.read_odometer()
  87. ######################################################################################
  88. C:\Anaconda3\python.exe H:/python/venv/pizza.py
  89. My dog's name is Atom.
  90. My dog's age is 3 years old!
  91. 创建多个实例
  92. My dog name is Tom
  93. Your dog name is Mei
  94. 9.2使用类和实例
  95. a4
  96. 2017 a4 audi
  97. This car has 100 miles on it
  98. 9.2.3直接修改属性的值
  99. 2016 a4 audi
  100. 2017 a4 audi
  101. This car has 100 miles on it
  102. This car has 23 miles on it
  103. 9.2.3通过方法修改
  104. You can't roll back an odometer
  105. 2017 a4 audi
  106. This car has 23 miles on it
  107. 2017 a4 audi
  108. This car has 120 miles on it
  109. 通过方法对属性的值进行递增
  110. 2013 outback sudo
  111. This car has 23500 miles on it
  112. This car has 23600 miles on it
  113. Process finished with exit code 0
  114. ####################################################################################
  115. print("9.3继承")
  116. class Car():
  117. """一次模拟汽车的简单尝试"""
  118. def __init__(self, make, model, year):
  119. """汽车的初始化"""
  120. self.make = make
  121. self.model = model
  122. self.year = year
  123. self.odometer_reading = 100
  124. def get_descri_name(self):
  125. """描述汽车"""
  126. long_name = str(self.year) + ' ' + self.model + ' ' + self.make
  127. return long_name
  128. def update(self, mile):
  129. """更新里程值"""
  130. if mile > self.odometer_reading:
  131. self.odometer_reading = mile
  132. else:
  133. print("You can't roll back an odometer")
  134. def increment_odometer(self,mile):
  135. """增加里程"""
  136. self.odometer_reading += mile
  137. def read_odometer(self):
  138. """打印汽车的里程"""
  139. print("This car has " + str(self.odometer_reading) + " miles on it.")
  140. # 创建子类 父类必须包含在当前文件中 且位于子类前面
  141. class ElectricCar(Car):
  142. """电动汽车的独特特性"""
  143. def __init__(self, make, model, year):
  144. """初始化父类的属性"""
  145. # super()是一个特殊函数 帮助python将父类与子类关联起来
  146. super().__init__(make, model, year)
  147. class Car():
  148. """一次模拟汽车的简单尝试"""
  149. def __init__(self, make, model, year):
  150. """汽车的初始化"""
  151. self.make = make
  152. self.model = model
  153. self.year = year
  154. self.odometer_reading = 100
  155. def get_descri_name(self):
  156. """描述汽车"""
  157. long_name = str(self.year) + ' ' + self.model + ' ' + self.make
  158. return long_name
  159. def update(self, mile):
  160. """更新里程值"""
  161. if mile > self.odometer_reading:
  162. self.odometer_reading = mile
  163. else:
  164. print("You can't roll back an odometer")
  165. def increment_odometer(self,mile):
  166. """增加里程"""
  167. self.odometer_reading += mile
  168. def read_odometer(self):
  169. """打印汽车的里程"""
  170. print("This car has " + str(self.odometer_reading) + " miles on it.")
  171. def fill_gas_tank(self):
  172. print("haha")
  173. class Battery():
  174. """一次模拟电动汽车"""
  175. def __init__(self, battery_size=70):
  176. """初始化电瓶的属性"""
  177. self.battery_size = battery_size
  178. def describe_battery(self):
  179. """打印一条描述电瓶容量的消息"""
  180. print("This car has a " + str(self.battery_size) + "-kwh battery.")
  181. def get_range(self):
  182. """打印一条消息,指出电瓶的续航里程"""
  183. if self.battery_size == 70:
  184. range = 240
  185. elif self.battery_size == 85:
  186. range = 270
  187. message = "This car can go approximately " + str(range)
  188. message += " miles on a full charge!"
  189. print(message)
  190. class ElectricCar(Car):
  191. """电动汽车的独特特性"""
  192. def __init__(self, make, model, year):
  193. """初始化父类的属性"""
  194. super().__init__(make, model, year)
  195. # 将实例用作属性
  196. self.battery = Battery()
  197. # 重写父类的方法
  198. def fill_gas_tank(self):
  199. print("This car doesn't need a gas tank! ")
  200. my_tesla = ElectricCar('tesla', 'model s', '2016')
  201. print(my_tesla.get_descri_name())
  202. my_tesla.fill_gas_tank()
  203. my_tesla.battery.describe_battery()
  204. # 将实例用作属性
  205. my_tesla.battery.get_range()
  206. ####################################################################################
  207. C:\Anaconda3\python.exe H:/python/venv/pizza.py
  208. 9.3继承
  209. 2016 model s tesla
  210. This car doesn't need a gas tank!
  211. This car has a 70-kwh battery.
  212. This car can go approximately 240 miles on a full charge!
  213. Process finished with exit code 0
  214. ######################################################################################
  215. car.py:
  216. class Car():
  217. """一次模拟汽车的简单尝试"""
  218. def __init__(self, make, model, year):
  219. """汽车的初始化"""
  220. self.make = make
  221. self.model = model
  222. self.year = year
  223. self.odometer_reading = 100
  224. def get_descri_name(self):
  225. """描述汽车"""
  226. long_name = str(self.year) + ' '+ self.make + ' '+ self.model
  227. return long_name.title()
  228. def update(self, mile):
  229. """更新里程值"""
  230. if mile > self.odometer_reading:
  231. self.odometer_reading = mile
  232. else:
  233. print("You can't roll back an odometer")
  234. def increment_odometer(self, mile):
  235. """增加里程"""
  236. self.odometer_reading += mile
  237. def read_odometer(self):
  238. """打印汽车的里程"""
  239. print("This car has " + str(self.odometer_reading) + " miles on it.")
  240. class Battery():
  241. """一次模拟电动汽车"""
  242. def __init__(self,battery_size=70):
  243. """初始化电瓶的属性"""
  244. self.battery_size = battery_size
  245. def describe_battery(self):
  246. """打印一条描述电瓶容量的消息"""
  247. print("This car has a " + str(self.battery_size) + "-kwh battery.")
  248. def get_range(self):
  249. """打印一条描述电瓶续航里程的消息"""
  250. if self.battery_size == 70:
  251. range = 240
  252. elif self.battery_size == 85:
  253. range = 270
  254. message = "This car can go approximate " + str(range)
  255. message += " miles on a full charge. "
  256. print(message)
  257. class ElectricCar(Car):
  258. """模拟电动汽车的独特之处"""
  259. def __init__(self, make, model, year):
  260. """初始化父类的属性,再初始化电动汽车特有的属性"""
  261. super().__init__(make, model, year)
  262. self.battery = Battery()
  263. ########################################################################################## from car import Car
  264. from car import Car, Battery, ElectricCar
  265. my_new_car = Car('audi', 'a4', 2016)
  266. print(my_new_car.get_descri_name())
  267. my_new_car.odometer_reading = 23
  268. my_new_car.read_odometer()
  269. print("9.4.2一个模块中可以存储多个类,所以可以一次导入多个类")
  270. my_tesla = ElectricCar('tesla', 'model s', 2016)
  271. print(my_tesla.get_descri_name())
  272. my_tesla.battery.describe_battery()
  273. my_tesla.battery.get_range()
  274. print("9.3.4 从一个模块中导入多个类")
  275. my_beetle = Car('volkswagen', 'beetle', 2015)
  276. print(my_beetle.get_descri_name())
  277. my_tesla = ElectricCar('tesla', 'roadster', 2016)
  278. print(my_tesla.get_descri_name())
  279. ######################################################################################
  280. C:\Anaconda3\python.exe H:/python/venv/pizza.py
  281. 2016 Audi A4
  282. This car has 23 miles on it.
  283. 9.4.2一个模块中可以存储多个类,所以可以一次导入多个类
  284. 2016 Tesla Model S
  285. This car has a 70-kwh battery.
  286. This car can go approximate 240 miles on a full charge.
  287. 9.3.4 从一个模块中导入多个类
  288. 2015 Volkswagen Beetle
  289. 2016 Tesla Roadster
  290. Process finished with exit code 0
  291. #####################################################################################
  292. print("9.4.4导入整个模块")
  293. import car
  294. # 导入整个模块的时候,需要使用句点表示法访问需要的类
  295. # 使用语法module_name.class_name
  296. my_beetle = car.Car('vvv', 'tt', 2015)
  297. print(my_beetle.get_descri_name())
  298. my_tesla = car.ElectricCar('dd', 'aa', 2016)
  299. print(my_tesla.get_descri_name())
  300. ###############################################################################
  301. C:\Anaconda3\python.exe H:/python/venv/pizza.py
  302. 9.4.4导入整个模块
  303. 2015 Vvv Tt
  304. 2016 Dd Aa
  305. Process finished with exit code 0
  306. ############################################################################
  307. print("9.4.5导入模块中的类")
  308. from car import * # 导入所有的类

在一个模块中导入另一个模块

  1. car.py:
  2. class Car():
  3. """一次模拟汽车的简单尝试"""
  4. def __init__(self, make, model, year):
  5. """汽车的初始化"""
  6. self.make = make
  7. self.model = model
  8. self.year = year
  9. self.odometer_reading = 100
  10. def get_descri_name(self):
  11. """描述汽车"""
  12. long_name = str(self.year) + ' ' + self.make + ' ' + self.model
  13. return long_name.title()
  14. def update(self, mile):
  15. """更新里程值"""
  16. if mile > self.odometer_reading:
  17. self.odometer_reading = mile
  18. else:
  19. print("You can't roll back an odometer")
  20. def increment_odometer(self, mile):
  21. """增加里程"""
  22. self.odometer_reading += mile
  23. def read_odometer(self):
  24. """打印汽车的里程"""
  25. print("This car has " + str(self.odometer_reading) + " miles on it.")
  26. #########################################################################################
  27. ElectricCar.py:
  28. from car import Car
  29. class Battery():
  30. """一次模拟电动汽车"""
  31. def __init__(self,battery_size=70):
  32. """初始化电瓶的属性"""
  33. self.battery_size = battery_size
  34. def describe_battery(self):
  35. """打印一条描述电瓶容量的消息"""
  36. print("This car has a " + str(self.battery_size) + "-kwh battery.")
  37. def get_range(self):
  38. """打印一条描述电瓶续航里程的消息"""
  39. if self.battery_size == 70:
  40. range = 240
  41. elif self.battery_size == 85:
  42. range = 270
  43. message = "This car can go approximate " + str(range)
  44. message += " miles on a full charge. "
  45. print(message)
  46. class ElectricCar(Car):
  47. """模拟电动汽车的独特之处"""
  48. def __init__(self, make, model, year):
  49. """初始化父类的属性,再初始化电动汽车特有的属性"""
  50. super().__init__(make, model, year)
  51. self.battery = Battery()
  52. ##################################################################################
  53. from car import Car
  54. from electric_car import ElectricCar
  55. my_beetle = Car('aa', 'bb', 2016)
  56. print(my_beetle.get_descri_name())
  57. my_tesla = ElectricCar('dd', 'aa', 2016)
  58. print(my_tesla.get_descri_name())
  59. ##################################################################################
  60. C:\Anaconda3\python.exe H:/python/venv/pizza.py
  61. 2016 Aa Bb
  62. 2016 Dd Aa
  63. Process finished with exit code 0
  64. ####################################################################################
  65. # favorite_language.py
  66. from collections import OrderedDict
  67. favorite_language = OrderedDict()
  68. favorite_language['a'] = 'python'
  69. favorite_language['b'] = 'c'
  70. favorite_language['c'] = 'ruby'
  71. favorite_language['d'] = 'python'
  72. # 创建了OrderedDict类的一个实例 并将其存储到favorite_language中 注意这里没有用花括号 而是调用OrderedDict()来创建一个空的有序字典
  73. # 优点:兼具列表和字典的主要优点
  74. for name, language in favorite_language.items():
  75. print(name.title() + " 's favorite language is " + language.title() + ". ")
  76. #######################################################################################
  77. C:\Anaconda3\python.exe H:/python/venv/pizza.py
  78. A 's favorite language is Python.
  79. B 's favorite language is C.
  80. C 's favorite language is Ruby.
  81. D 's favorite language is Python.
  82. Process finished with exit code 0
  83. ########################################################################################

发表评论

表情:
评论列表 (有 0 条评论,301人围观)

还没有评论,来说两句吧...

相关阅读