需求:创建一个类,然后后类中有类,实现如: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)