利用嵌套类(类中有类)实现“实例属性”的层级获取

需求:创建一个类,然后后类中有类,实现如: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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值