相关疑难解决方法(0)

Python:使类可迭代

我继承了一个项目,其中包含许多大类,只有类对象(整数,字符串等).我希望能够检查属性是否存在而无需手动定义属性列表.

是否可以使用标准语法使python 本身可迭代?也就是说,我希望能够使用for attr in Foo:(或甚至)迭代所有类的属性,if attr in Foo而无需首先创建类的实例.我想我可以通过定义来做到这一点__iter__,但到目前为止我还没有完全掌握我正在寻找的东西.

我通过添加如下__iter__方法实现了我想要的一些:

class Foo:
    bar = "bar"
    baz = 1
    @staticmethod
    def __iter__():
        return iter([attr for attr in dir(Foo) if attr[:2] != "__"])
Run Code Online (Sandbox Code Playgroud)

但是,这并不能完全满足我的需求:

>>> for x in Foo:
...     print(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'classobj' object is not iterable
Run Code Online (Sandbox Code Playgroud)

即便如此,这仍然有效:

>>> for x in Foo.__iter__():
...     print(x)
bar
baz
Run Code Online (Sandbox Code Playgroud)

python syntax attributes static-methods loops

37
推荐指数
3
解决办法
2万
查看次数

类型错误:“类型”对象不可迭代 - 迭代对象实例

我正在做一个项目,我想让我的一个类可迭代。据我所知,我可以使用元类来做到这一点。

首先,我想了解元类是如何工作的。因此,我想展示我自己的练习示例,其中我制作了 Car 课程。所以在这里我想让我的 Car 类对象可迭代,然后我想在主函数中打印它们的名称。

代码示例如下:

__author__ = 'mirind4'

class IterableCar(type):
    def __iter__(self):
        return iter(self.__name__)

class Car(object):
    __metaclass__ = IterableCar

    def __init__(self, name):
        self.name = name


if __name__=='__main__':

    car1 = Car('Mercedes')
    car2 = Car('Toyota')
    for cars in Car:
        print (cars.name)
Run Code Online (Sandbox Code Playgroud)

但不幸的是我得到了一个类型错误:

TypeError: 'type' object is not iterable
Run Code Online (Sandbox Code Playgroud)

你能不能告诉我我的代码哪里出错了?到目前为止,我已经通过这个网站和互联网检查了类似的问题,但我不知道问题是什么。我正在使用 python 3.4。提前致谢!

python iterable

7
推荐指数
1
解决办法
6万
查看次数

标签 统计

python ×2

attributes ×1

iterable ×1

loops ×1

static-methods ×1

syntax ×1