欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面向对象封装

程序员文章站 2024-03-23 14:28:34
...

面向对象封装应用

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

"""
面向对象封装的特点是:职责划分,封装什么就处理什么,然后给其他的类使用
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("")