需求:建立一個類,然後後類中有類,實作如:parent.childA.name,parent.childB.name這種逐級帶點擷取屬性的要求。
本執行個體主要解決了兩個問題:
1、實作 “執行個體.屬性.屬性”的方式,比如這樣可以很友善的擷取如“school.class.five.student.name”這樣嵌套的屬性。
2、通過将父class的self傳遞個子class,進而讓子class中可以調用父class的self,實作在子類中使用父類中的參數。
class WdTools(object):
def __init__(self, org_str=None, sqlcmd=None):
self.__sqlcmd = None
self.sqlcmd = sqlcmd
self.__org_str = org_str
self.org_str = org_str
# 擷取lemma (從單詞原型)
def get_lemma(self, org_str=None) -> list:
# 在這裡寫擷取lemma的代碼
return 擷取結果
@property # 添加lemma屬性
def lemma(self):
# lemma的類
class LemmaCls(object): # 關鍵步驟,類中再添加一個lemmaCls的類
def __init__(self, father_self): # father_self實際是傳遞了上一層執行個體的self
self.__single = None
self.__detail = None
self.__single_plus = None
self.__detail_plus = None
self.__father = father_self # lemmacls的執行個體可以通過self.__father調用上一層的執行個體中的參數
@property
def single(self):
return self.__single if self.__single else self.classify(mode='single')
@property
def detail(self): # 傳回詳細
return self.__detail if self.__detail else self.classify(mode='detail')
# 讀取lemma表
def classify(self, mode='single') -> list:
# 這裡就可以根據需要傳回屬性值(可以通過self.__father去調用上一層的參數參與處理)
return 處理結果
return LemmaCls(self)
通過以上處理,在程式中就可以使用 “執行個體.屬性.屬性” 的模式了。
wt = WdTools()
wt.org_str = "abandoned"
print(wt.lemma.single)
print(wt.lemma.detail)