You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python Mixin类支持直接迭代其内部方法?

实现Mixin类的直接遍历调用方法

要实现直接遍历Mixin类来调用其封装的字符串处理方法,核心是让类本身支持迭代——Python中要让一个对象(包括类对象)可迭代,需要实现__iter__方法。下面是具体的改造方案:

改造后的Mixin类

class Mixin:
    """Iterate methods"""
    @classmethod
    def strip(cls):
        return str.strip
    
    @classmethod
    def title(cls):
        return str.title
    
    @classmethod
    def swapcase(cls):
        return str.swapcase
    
    @classmethod
    def __iter__(cls):
        # 遍历类的所有属性,筛选出自定义的方法(排除内置特殊方法)
        for attr_name in dir(cls):
            # 排除以双下划线开头的特殊属性,同时排除__iter__自身
            if not attr_name.startswith('__') and attr_name != '__iter__':
                attr = getattr(cls, attr_name)
                # 确认是可调用的方法,然后返回方法的实际返回值(即str的对应处理方法)
                if callable(attr):
                    yield attr()

用法示例

现在你可以直接按照需求遍历Mixin类处理文本了:

content = "  hello world  "
for function in Mixin:
    content = function(content)
    print(content)

运行后会依次输出:

hello world
Hello World
hELLO wORLD

关键细节解释

  • 类方法改造:把原Mixin中的strip()、title()等方法改为@classmethod,这样类本身可以直接调用这些方法,不需要实例化。
  • __iter__类方法:定义成类方法后,Mixin类对象本身就能被for循环遍历。这个方法会:
    • 用dir(cls)获取类的所有属性名;
    • 筛选掉内置特殊方法(以__开头的)和__iter__自身;
    • 通过getattr(cls, attr_name)拿到方法对象,调用后得到str.strip、str.title这些实际处理字符串的函数;
    • 用yield逐个返回这些函数,实现迭代。
  • 为什么原dir(Mixin)不行:dir()返回的只是方法名称的字符串列表,而不是可直接调用的方法对象,我们需要通过getattr把名称映射到实际的方法,再调用原方法拿到最终要使用的字符串处理函数。

内容的提问来源于stack exchange,提问作者Wizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:03:45