【问题标题】:python: make a class object iterable [duplicate]python:使类对象可迭代[重复]
【发布时间】:2018-09-20 23:55:56
【问题描述】:

这是我想要做的:

我创建了一个类方法,如果没有将参数添加到此方法,则返回 dict 的对象,或者如果添加了任何参数,则返回由字典列表组成的对象,如下代码:

@classmethod
def make_attr(cls, **kwargs):
    """
    code: do something, generate either a tuple 
    """ 
    if :
        data = {}
        """
        add k, v in data
        """
        return cls(**data)
    else:
        data = []
        for k, v in kwargs.items():
            _d = {}
            _d[k] = v
            data.append(_d)
        return cls(*data)


代码如上,我遇到的问题是如果classmethod返回dict的对象,我可以使用object.attr来获取它的值,但是如果classmethod返回list的对象,我找不到解包或获取它的属性或值,例如:

>> result = Class.make_attr(login_name="test")
>> print("age: ", result.age)
>> age: 25

>> result = Class.make_attr()
>> print(result)
>> <model._class.Class object at 0x104020358>

>> for i in result:
>>     print(i)
>> TypeError: 'Class' object is not iterable

那么,我怎样才能使这个对象可迭代?

【问题讨论】:

  • @ducminh 感谢您的帮助,我只是查看了类似的问题并找到了我的解决方案

标签: python list object iterable class-method


【解决方案1】:

我终于找到了解决问题的方法,通过在我的类中添加内置方法:

class Class:
    def __init__(self, *args, **kwargs):
        self.start = 0
        self.end = args

    def __iter__(self):
        return self

    def __next__(self):
        if self.start >= len(self.end):
            raise StopIteration
        else:
            self.start += 1
            return self.end[self.start-1]

再次感谢@ducminh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 2020-03-08
    • 2017-03-05
    • 1970-01-01
    • 2020-02-12
    • 2018-07-20
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多