关于list:python:使一个类对象可迭代

python: make a class object iterable

本问题已经有最佳答案,请猛点这里访问。

我想做的是:我创建了一个classmethod,它返回dict的一个对象(如果没有向该方法添加参数),或者返回一个由dicts列表(如果添加了任何参数)组成的对象,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@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,我可以用object.attr来获取它的值,但是如果classmethod返回list的object,我找不到解包的方法,也找不到它的属性或值,比如:

1
2
3
4
5
6
7
8
9
10
11
>> 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

那么,我如何才能使这个对象不可更改呢?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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