Python類的創建、繼承和導入


面向對象編程是最有效的軟件編寫方法之一。在面向對象編程中,你編寫表示現實世界中的事物和情境的類,並基於這些類來創建對象。編寫類時,你定義一大類對象都有的通用行為。基於類創建對象時,每個對象都自動具備這種通用行為,然后可根據需要賦予每個對象獨特的個性。使用面向對象編程可模擬現實情境。

關於類的創建、使用、繼承和導入,具體方法如下:

以下的實例主要參考【Python編程從入門到實踐 [美] Eric Matthes 著 袁國忠 譯】這本書的第9章

然后加了一下自己的理解和其他不同的方法,若有侵權的行為發生,請告知,本人會立即刪除。

  • 創建和使用類:

直接上具體的列子,創建一個名為python_class_create的.py文件

 1 # -*- coding: UTF-8 -*-
 2 
 3 class Dog():
 4     """關於狗的動作描述"""
 5     def __init__(self, name, age):
 6         self.name = name
 7         self.age = age
 8 
 9     def run(self):
10         """小狗被命令跑"""
11         print(self.name.title() + " is now running.")
12 
13     def roll_over(self, color):
14         """可以在這個函數中加上獨特的屬性"""
15         print(self.name.title() + " is a " + color + "'s dog, and it rolled over!")
16 
17 """對上述類的使用"""
18 my_dog = Dog('Lucy', 6)
19 my_dog.run()
20 my_dog.roll_over('black')
  • 類的繼承

編寫類時,並非總是要從空白處開始。如果你要編寫的類是另一個現成類的特殊版本,可使用繼承。一個類繼承另一個類,它將自動獲得另一個類的所有屬性和方法;原有的類稱為父類。而新類稱為子類。子類繼承了其父類的所有屬性和方法。同時還可以定義自己的屬性和方法。如下

先寫一個父類,文件名稱為python_superclass.py

 1 # -*- coding: UTF-8 -*-
 2 
 3 class Car():
 4     """關於汽車的描述"""
 5     def __init__(self, make, model, year):
 6         """初始化描述汽車的屬性"""
 7         self.make = make
 8         self.model = model
 9         self.year = year
10         self.odometer_reading = 0  # 給屬性指定默認值
11 
12     def get_descriptive(self):
13         """返回描述性信息"""
14         long_name = str(self.year) + ' ' + self.make + ' ' + self.model
15         return long_name.title()
16     
17     def read_odometer(self):
18         """讀取里程表"""
19         print("This car has " + str(self.odometer_reading) + " miles on it.")
20         
21     def update_odometer(self, mileage):
22         if mileage >= self.odometer_reading:
23             self.odometer_reading = mileage
24         else:
25             print("You can't roll back an odometer!")
26             
27     def increment_odometer(self, miles):
28         self.odometer_reading += miles

創建子類時,Python首先需要完成的任務是給父類的所有屬性賦值。為此,子類的方法__init__()需要父類施以援手。

 1 class ElectricCar(Car):
 2     """電動車的獨特之處"""
 3     def __init__(self, make, model, year):
 4         """初始化父類的屬性"""
 5         super().__init__(make, model, year)
 6         """再初始化子類的屬性"""
 7         self.battery_size = 70
 8         
 9     def describe_battery(self):
10         print("This car has a " + str(self.battery_size) + "-kWh battery.")
11         
12     """再子類中對父類的重寫"""
13     '''
14     假設父類中有一個名為fill_gas_tank()的函數,但它對子類來說毫無意義,因此
15     你可能需要重寫它
16     '''
17     def fill_gas_tank(self):
18         """電動汽車沒有油箱"""
19         print("This car doesn't need a gas tank!")
20         
21 my_tesla = ElectricCar('tesla', 'model s', 2018)
22 my_tesla.describe_battery()
  • 導入類

隨着你不斷地給類添加功能,文件可能變得更長,即便你妥善地使用了繼承亦如此。為遵循Python的總體理念,應讓文件盡可能簡潔。為在這方面提供幫助,Python允許將類儲存在模塊中,然后在主程序中導入所需的模塊,例如上述的python_superclass.py文件。

新建一個

你可以導入一個類,也可以導入多個類

 1 # -*- coding:UTF-8 -*-
 2 
 3 from python_superclass import Car, ElectricCar
 4 
 5 """導入所有類"""
 6 from python_superclass import *
 7 
 8 my_beetle = Car('volkswagen', 'beetle', 2018)
 9 print(my_beetle.get_descriptive())
10 
11 my_tesla = ElectricCar('tesla', 'roadster', 2017)
12 print(my_tesla.get_descriptive())

另外一種方法:

 1 # -*- coding:UTF-8 -*-
 2 
 3 """導入模塊"""
 4 import python_superclass
 5 
 6 my_beetle = python_superclass.Car('volkswagen', 'beetle', 2018)
 7 print(my_beetle.get_descriptive())
 8 
 9 my_tesla = python_superclass.ElectricCar('tesla', 'roadster', 2017)
10 print(my_tesla.get_descriptive())

以上導入類的方法有一個前提,這些模塊必須在同一目錄下,某則的話會報錯,如下:

 

下面關於導入另一目錄下類的方法進行簡述:

此時python_import_class.py文件在目錄為:H:\Python Procedure\python class的文件夾下,而python_superclass.py文件在目錄為:H:\Python Procedure\python dictionary的文件夾下,

針對這種情況的解決方法如下:

 1 # -*- coding:UTF-8 -*-
 2 
 3 import sys
 4 sys.path.append(r"H:/Python Procedure/python dictionary")
 5 import python_superclass
 6 
 7 my_beetle = python_superclass.Car('volkswagen', 'beetle', 2018)
 8 print(my_beetle.get_descriptive())
 9 
10 my_tesla = python_superclass.ElectricCar('tesla', 'roadster', 2017)
11 print(my_tesla.get_descriptive())

同樣,如果是放在了上級目錄或者下級目錄中,也可以使用上述方法,可以認為它是一種通用的方法。

當你看到這篇文章的時候,希望上述的內容能夠對你有所幫助,當然,有什么錯的地方,也請你提出來,我會多多改正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM