In [1]:
from astropy.cosmology import WMAP9, Planck15 # 從astropy.cosmology中引入兩個內建的宇宙物件
print(WMAP9) # WMAP9是以FlatLambdaCDM類別所產生的一個內建物件
print(Planck15) # Planck15是以FlatLambdaCDM類別所產生的另一個內建物件
print(WMAP9.H0) # WMAP9物件的H0屬性
print(Planck15.Om0) # Planck15物件的Om0屬性
print(WMAP9.luminosity_distance(1.5)) # WMAP9物件中用以計算luminosity_distance的方法
print(Planck15.comoving_distance([0.5, 1.0, 1.5])) # Planck15物件中用以計算comoving_distance的方法
In [2]:
from astropy.cosmology import FlatLambdaCDM # 從astropy.cosmology中引入內建的FlatLambdaCDM宇宙類別(模型)
my_universe1 = FlatLambdaCDM(name='MyUniverse1', H0=70, Om0=0.3) # 利用FlatLambdaCDM類別來產生一個宇宙物件
print(my_universe1)
print(my_universe1.luminosity_distance(5))
print(my_universe1.age([0.5, 1, 1.5]))
In [3]:
from astropy.cosmology import LambdaCDM # 從astropy.cosmology中引入內建的LambdaCDM宇宙類別(模型)
my_universe2 = LambdaCDM(name='MyUniverse2', H0=70, Om0=0.3, Ode0=0.7) # 利用LambdaCDM類別來產生一個宇宙物件
print(my_universe2)
print(my_universe2.luminosity_distance(5))
print(my_universe2.age([0.5, 1, 1.5]))
屬於同個類別的不同物件, 其屬性能有相同或不同的值
例如: WMAP9, Planck15和my_universe1都是由FlatLambdaCDM類別(模型)所產生的物件,在共通的屬性中,Tcmb0有相同的值,H0則是不同的值
In [4]:
print(WMAP9)
print(Planck15)
print(my_universe1)
物件的方法如同函式(function), 但它們可以直接在內部存取物件的屬性
例如: 我們可用WMAP9, Planck15, my_universe1這三個物件共有的方法luminosity_distance來計算所屬的光度距離, 但只要輸入紅移值, 不用輸入計算過程中所需的物理量, 像是H0
In [5]:
print(WMAP9.luminosity_distance([0.5, 1, 1.5]))
print(Planck15.luminosity_distance([0.5, 1, 1.5]))
print(my_universe1.luminosity_distance([0.5, 1, 1.5]))
某物件是某類別的一個實例(instance)
例如: 內建的WMAP9物件是FlatLambdaCDM類別的一個實例
In [6]:
print(WMAP9.__doc__)
類別的封裝(encapsulation)特性讓使用者不必在意程式內部的細節, 直接使用開發者提供的介面即可
例如: 我們要產生屬於特定類別的物件時可以直接使用astropy.cosmology模組所提供的的應用程式介面(API)
子父類別間的繼承(inheritance)可讓程式開發者定義類別時避免重複定義不同類別間相同的屬性和方法, 而且能複寫或新增屬性和方法
例如: 在astropy.cosmology模組中, 開發者先定義一個用以描述均勻且均向的宇宙類別FLRW, 該類別中定義了所屬物件共通的屬性和方法, 像是luminosity_distance(), 當開發者要進一步定義FLRW中的一個特例類別LambdaCDM(均勻且均向的宇宙, 且考慮宇宙常數和曲率的類別)時, 無需重複定義共通的屬性和方法, 只需針對特例點來複寫或新增屬性和方法。 同樣的繼承關係也適用於LambdaCDM的特例類別FlatLambdaCDM(均勻且均向的宇宙, 考慮宇宙常數但曲率為零的類別)。