Python3 類繼承 匯入類
參考檔案:《Python程式設計:從入門到實踐》
Car類,Car.py檔案
#!/usr/local/python3.6.1/bin/python3 class Car(): """一次模擬汽車的簡單嘗試""" odometer_reading = 0 def __init__(self, make, model, year): """初始化描述汽車的屬性""" self.make = make self.model = model self.year = year def get_descriptive_name(self): """返回整潔的描述性資訊""" long_name = str(self.year) + ' ' + self.make + ' ' + self.model return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") def update_odometer(self, mileage): """ 將里程錶讀數設定為指定的值 禁止將里程錶讀數往回調 """ if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can't roll back an odometer!") def increment_odometer(self, miles): """將里程錶讀數增加指定的量""" self.odometer_reading += miles
在Car.py檔案中例項化物件,如下:
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
執行後的效果如下:
[[email protected] python3.com]# ./Car.py
2016 Audi A4
This car has 0 miles on it.
繼承
子類的方法__init__()
建立子類的例項時, Python首先需要完成的任務是給父類的所有屬性賦值。 為此, 子類的方法__init__() 需要父類施以援手。
執行效果:#!/usr/local/python3.6.1/bin/python3 class Car(): """一次模擬汽車的簡單嘗試""" def __init__(self, make, model, year): self.make = make self.model = model self.year = year self.odometer_reading = 0 def get_descriptive_name(self): long_name = str(self.year) + ' ' + self.make + ' ' + self.model return long_name.title() def read_odometer(self): print("This car has " + str(self.odometer_reading) + " miles on it.") def update_odometer(self, mileage): if mileage >= self.odometer_reading: self.odometer_reading = mileage else: print("You can't roll back an odometer!") def increment_odometer(self, miles): self.odometer_reading += miles class ElectricCar(Car): """電動汽車的獨特之處""" def __init__(self, make, model, year): """初始化父類的屬性""" super().__init__(make, model, year) my_tesla = ElectricCar('tesla', 'model s', 2016) print(my_tesla.get_descriptive_name())
[[email protected] python3.com]# ./ElectricCar.py
2016 Tesla Model S
匯入類
如單獨一個Car.py檔案,單獨一個ElectricCar.py檔案,單獨一個man.py檔案;在man.py檔案中,ElectricCar繼承了Car,例項化一個ElectricCar物件。Car.py檔案
#!/usr/local/python3.6.1/bin/python3
#①
class Car():
"""一次模擬汽車的簡單嘗試"""
odometer_reading = 0
def __init__(self, make, model, year):
"""初始化描述汽車的屬性"""
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
"""返回整潔的描述性資訊"""
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
"""
將里程錶讀數設定為指定的值
禁止將里程錶讀數往回調
"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
"""將里程錶讀數增加指定的量"""
self.odometer_reading += miles
ElectricCar.py檔案
#!/usr/local/python3.6.1/bin/python3 #② import Car class ElectricCar(Car.Car): """電動汽車的獨特之處""" #③ def __init__(self, make, model, year): """初始化父類的屬性"""
#④
super().__init__(make, model, year)
man.py檔案#!/usr/local/python3.6.1/bin/python3 #匯入ElectricCar類,並重命名為e import ElectricCar as e #⑤ my_tesla = e.ElectricCar('tesla', 'model s', 2016) print(my_tesla.get_descriptive_name())執行man.py檔案的結果為:
2016 Tesla Model S
首先是Car 類的程式碼(見①) 。 建立子類時, 父類必須包含在當前檔案中, 且位於子類前面。 在②處, 我們定義了子類ElectricCar 。 定義子類時, 必須在括號內指定父類的名稱。 方法__init__() 接受建立Car 例項所需的資訊(見③) 。
④處的super() 是一個特殊函式, 幫助Python將父類和子類關聯起來。 這行程式碼讓Python呼叫ElectricCar 的父類的方法__init__() , 讓ElectricCar 例項包含父類的所
有屬性。 父類也稱為超類 (superclass) , 名稱super因此而得名。
為測試繼承是否能夠正確地發揮作用, 我們嘗試建立一輛電動汽車, 但提供的資訊與建立普通汽車時相同。 在⑤處, 我們建立ElectricCar 類的一個例項, 並將其儲存在變
量my_tesla 中。 這行程式碼呼叫ElectricCar 類中定義的方法__init__() , 後者讓Python呼叫父類Car 中定義的方法__init__() 。 我們提供了實參'tesla' 、 'model
s' 和2016 。
除方法__init__() 外, 電動汽車沒有其他特有的屬性和方法。 當前, 我們只想確認電動汽車具備普通汽車的行為
相關推薦
Python3 類繼承 匯入類
參考檔案:《Python程式設計:從入門到實踐》 Car類,Car.py檔案 #!/usr/local/python3.6.1/bin/python3 class Car(): """一次模擬汽車的簡單嘗試""" odometer_reading = 0
子類繼承父類後想要擴展父類方法
保留 回調 gen obj pcl logs col 父類 sel 1 >>> class PClass(object): 2 def setInfo(self,sex=‘Male‘): 3 self.gender = se
Java 子類繼承父類成員中的問題
subclass 情況 討論 就會 之前 測試 public 測試結果 string 之前搞錯了,變量沒有“重寫”一說,只有方法才能被“重寫”。如果我們在子類中聲明了一個和父類中一樣的變量,那麽實際的情況是,子類的內存堆中會有類型和名字都相同的兩個變量。 現在考慮一
python 子類繼承父類__init__(轉載)
elf lpad pla 最好 就是 main 代碼 borde wid 轉載: http://www.jb51.net/article/100195.htm 前言 使用Python寫過面向對象的代碼的同學,可能對 __init__ 方法已經非常熟悉了,__init__
子類繼承父類,父類中的構造器
gen 向上轉型 類構造 復制 使用 article col 成員 ring 子類繼承父類,子類構造器會默認調用super()(無論構造器中是否寫有super()),用於初始化父類成員.同時當父類中存在有參構造器時,必須提供無參構造器,子類構造器中並不會自動繼承有參構造器,
java異常練習題:定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果
題目描述: 定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。 定義一個DivException類繼承RuntimeException類,要求兩數相除等於2報錯,在主類中定義
java中子類繼承父類程式執行順序問題
測試程式碼: package test; public class FatherTest { private String name; public FatherTest(){ System.out.println("--父類的無參建構函式--"); } public
1).定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。
1).定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。 2).定義一個DivException類繼承RuntimeException類,要求兩數相除等於2報錯,在主類中定義一個方法,在方法中丟
c++子類繼承父類函式呼叫特性原理以及與java的對比
c++ c++中子類繼承了父類,子類物件的函式和變數會接著新增在父類物件的記憶體後面,以此類推。。。 如果c++中父類的那個變數或者函式宣告為virtual虛擬函式,那麼子類物件的同名函式就直接覆蓋了(即在記憶體中真正的覆蓋,父類的這個函式已經不在了)父類物件的這個函式 如
Java子類繼承父類,類的載入順序,看著一篇就夠了
1. 程式碼 package parent; public class Child extends Father { static { System.out.println("
記mybatis-generator生成實體類繼承基類的一個大坑
我的天哪,一個簡單的問題,搞死我了。 在我們用mybatis-generator生成實體類的時候,會希望這些實體類繼承自一個基類,這個基類包含了實體類共同的屬性,如uuid,createdate等資訊。 問題來了,直接在generatorConfig中新增roo
java中的繼承-子類繼承父類的許可權問題
java中的繼承 Java語言面向物件有三大特性:封裝、繼承、多型。其中的繼承,描述了一
java中子類繼承父類和實現介面有同名方法怎麼處理
Java是一門單繼承語言,但是,在子類的繼承關係中,會存在父類和介面有同名方法的情況,這種情況該怎麼處理呢? 我們來一步步驗證: 1.子類繼承父類,實現介面,父類和介面有同名方法 public int
java中子類繼承父類呼叫利用繼承方法時呼叫this
package cn.itcast.test1; class Parent{ public Object getObject(){ return this; } } c
python 子類繼承父類的__init__方法
父類: 1 class A(object): 2 def __init__(self, name): 3 self.name = name 4 print("父類name:", self.name) 5 6 def getName(self): 7
java中子類繼承父類時是否繼承建構函式呢?
java繼承中對建構函式是不繼承的。 以下是例子: public class FatherClass { public FatherClass() { System.out.println(100); } public FatherClass(int age)
Java中子類繼承父類關於構造方法的問題
子類繼承了父類,若父類的構造方法沒有過載那麼,子類的構造方法也不需要通過super呼叫父類構造方法。一個類中如果構造方法重寫了並且帶了引數,那麼這個類的原來系統預設的無參構造方法便消失。由此,若一個父類中只有一個帶引數的構造方法,那麼在寫其子類的構造方法時必須先通過super
子類繼承父類的輸出結果
public class A { static{ System.out.println("static in class A"); } public A(){ System.out.println("class A"); }
子類繼承父類的虛擬函式呼叫
父類:Father 子類:Son 1. Father* fa=new Son() 例項1: #include<iostream> using namespace std; class Father{ public: Father(){ cou
關於子類繼承父類後呼叫方法的問題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class ParentClass { public String m