昨晚把python里面的面向?qū)ο笏枷雽W(xué)了一下握爷,今天把畫圖函數(shù)寫成class忍坷。這樣也算我從寫腳本到寫函數(shù)蹲堂,再到寫類有了一個(gè)還算完整的經(jīng)歷宰译。
所謂面向?qū)ο螅疤崾怯袑ο篌〖肌6@個(gè)對象需要你事先想好你要干什么玩敏,針對的是什么問題。本例中畫圖质礼,針對的對象是“畫圖這個(gè)事情”旺聚,而這個(gè)事情包含了幾個(gè)步驟或者說幾個(gè)動(dòng)作,這幾個(gè)動(dòng)作可以互不影響眶蕉,如方法get_catalog和get_zuobiao_道號(hào)砰粹,也可以將方法2的結(jié)果作為方法3引用的變量,引用格式為‘變量 = self.方法2()’造挽。這些動(dòng)作或者說方法碱璃,以前單獨(dú)拿出來叫函數(shù),在類中引用的變量是類內(nèi)部的屬性饭入,這個(gè)所謂屬性嵌器,表明了這個(gè)類包含了哪些特點(diǎn),屬性用self.表示谐丢,而這個(gè)與同名的外部參數(shù)爽航,賦予了一個(gè)對象單獨(dú)的‘屬性值’蚓让,不同的對象傳遞進(jìn)去不同的屬性值,但他們屬于相同的類讥珍。
可見历极,對于射線追蹤正演類的屬性或者說輸入是模型,receiver和source位置衷佃;反演類的屬性為:迭代次數(shù)趟卸,阻尼因子和平滑算子,引用變量為self.modeling()
class Huatu:
def __init__(self, catalog, dasvpath):
self.catalog = catalog
self.dasvpath = dasvpath
def get_catalog(self):
df = pd.read_csv(self.catalog, header = None, delimiter=r'\s+')
return df
def get_zuobiao_daohao(self):
zuobiao = pd.DataFrame(columns=['name', 'utmeasting', 'utmnorthing'])
sgy_list = []
index = []
path = Path(self.dasvpath)
for folders in path.rglob('*.sgy'): #指定日期和分量
sgy_list.append(folders)
index.append(folders.name.split('_')[0])
for i in range(len(index)):
name = df.loc[int(index[i])][17]
east = df.loc[int(index[i])][10]
north = df.loc[int(index[i])][11]
zuobiao = zuobiao.append({'name':name, 'utmeasting':east, 'utmnorthing':north}, ignore_index = True)
return zuobiao
def plot(self, figsize):
zuobiao = self.get_zuobiao_daohao()
plt.figure(figsize=figsize)
plt.scatter(327961.54-320000, 4407554.94-4407000)
plt.annotate('well', xy = (327961.54-320000, 4407554.94-4407000),
xytext = (327961.54-320000+10, 4407554.94-4407000) )
for i in range(len(zuobiao)):
plt.scatter(zuobiao.loc[i][1]-320000, zuobiao.loc[i][2]-4407000, c = 'r', s = 10)
plt.annotate(zuobiao.loc[i][0], xy = (zuobiao.loc[i][1]-320000, zuobiao.loc[i][2]-4407000),
xytext = (zuobiao.loc[i][1]-320000, zuobiao.loc[i][2]-4407000))
plt.title('PoroTomo_3.19_DASV_source_distribution')
plt.xlabel('easting(m)')
plt.ylabel('northing(m)')
plt.show()