在类上定义魔术方法

丹尼尔·吉布斯

我想定义一个可以迭代的单个对象,而不必先创建一个类,然后再创建一个实例。像这样:

class Thing(object):
    stuff = ["foo", "bar", "baz"]

    @classmethod
    def __iter__(cls):
        return iter(cls.stuff)

for thing in Thing:
    print thing

但是,这实际上不起作用。有什么办法吗?

尼基

以下是Ashwini在其评论中正确建议的内容。这适用于Python 2。

class ThingType(type):
    __stuff__ = ["foo", "bar", "baz"]

    @classmethod
    def __iter__(cls):
        return iter(cls.__stuff__)

class Thing(object):
    __metaclass__ = ThingType

for thing in Thing:
    print thing

这适用于Python 3:

class ThingType(type):
    __stuff__ = ["foo", "bar", "baz"]

    @classmethod
    def __iter__(cls):
        return iter(cls.__stuff__)

class Thing(object, metaclass=ThingType):
    pass

for thing in Thing:
    print(thing)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在类外定义魔术方法有什么用?

来自分类Dev

了解魔术方法的简单类

来自分类Dev

Python的用于表示类的魔术方法?

来自分类Dev

检查是否在mixee类上定义了方法?

来自分类Dev

动态定义__add__(和其他魔术方法)

来自分类Dev

从Clojure访问在抽象基类上定义的公共方法

来自分类Dev

类如何调用在单例类上定义的类方法?

来自分类Dev

类如何调用在单例类上定义的类方法?

来自分类Dev

如果未在类C ++中定义方法,如何在类对象上使用方法

来自分类Dev

查找定义方法的类

来自分类Dev

定义动态类方法

来自分类Dev

接口与类:定义方法

来自分类Dev

如何覆盖魔术方法?

来自分类Dev

Python魔术方法的困惑

来自分类Dev

Symfony Controller的魔术方法?

来自分类Dev

Python“中”魔术方法?

来自分类Dev

使用Lambda的魔术方法

来自分类Dev

PHPunit调用魔术方法

来自分类Dev

Python魔术方法的困惑

来自分类Dev

如何覆盖魔术方法?

来自分类Dev

PHPunit调用魔术方法

来自分类Dev

操作 Python 魔术方法

来自分类Dev

有没有办法在python中的用户定义类上定义list(obj)方法?

来自分类Dev

如何停止此检查:“成员具有受保护的访问,但类具有魔术方法__get”?

来自分类Dev

如何停止此检查:“成员具有受保护的访问,但类具有魔术方法__get”?

来自分类Dev

使用python中父类的魔术方法__init__初始化子类

来自分类Dev

工作原理:PHP中的魔术方法,通过逻辑而非定义来理解它们

来自分类Dev

分配(而不是定义)__ getitem__魔术方法会破坏索引编制

来自分类Dev

工作原理:PHP中的魔术方法,通过逻辑而非定义来理解它们

Related 相关文章

热门标签

归档