面向对象封装

面向对象封装应用

这里通过封装构造成页面的搜索条件

"""
面向对象封装的特点是:职责划分,封装什么就处理什么,然后给其他的类使用
FilterOption类中封装的是具体的处理功能,FilterList类中传入参数option,和data_list,
option:实例化对象的时候,传入的参数是FilterOption实例化的对象,就是FilterList可以调用FilterOption的属性和方法
data_list:用于__iter__ 的yield使用,yield后面是可迭代对象。
如果data_list 中的数据是数字类型,在操作的时候需要转换成字符串
"""


class FilterList(object):
    def __init__(self, option, data_list):
        self.option = option
        self.data_list = data_list

    @property
    def show(self):
        ret = self.option.nick  # 调用FilterOption中的nick方法
        return ret

    def __iter__(self):
        yield "全部"
        for i in self.data_list:
            # yield self.option.bs + str(i)
            yield "<a href='{0}'>{1}</a>".format(i, self.option.bs + str(i))


class FilterOption(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @property
    def nick(self):
        tpl = self.name + str(self.age)
        return tpl

    @property
    def bs(self):
        if self.age > 15:
            return "大"
        else:
            return "小"


obj_list = [
    FilterList(FilterOption('aaa', 9), [1, 2, 3]),
    FilterList(FilterOption('bbb', 19), [4, 5, 6]),
    FilterList(FilterOption('ccc', 9), [7, 8, 9]),
    FilterList(FilterOption('ddd', 18), [3, 5, 6])
]

for obj in obj_list:
    print(obj.show) # 调用show方法
    for item in obj:
        """
        对象中有__iter__和yield方法,还可以进行for循环
        """
        print(item, end='  ')
    else:
        print("")

原文地址:https://www.cnblogs.com/Python666/p/7510145.html