0

我猜 self.n 不是实例属性,因为它没有出现在构造函数部分下。你怎么称呼它?

class PowTwo:
    """Class to implement an iterator
    of powers of two"""

    def __init__(self, max = 0):
        self.max = max

    def __iter__(self):
        self.n = 0
        return self

    def __next__(self):
        if self.n <= self.max:
            result = 2 ** self.n
            self.n += 1
            return result
        else:
            raise StopIteration
4

1 回答 1

1

正如评论者所说,它仍然是一个实例属性。

Python 类是完全动态的,这意味着您可以在任何时候继续定义新的实例属性,例如self.n = 0在本例中。作为一种良好的编程风格,通常它们是在 中定义的__init__,但这只是一个约定。

IMO,在您的代码示例中,定义更好的样式self.n-__init__这样您就不能有一个没有self.n定义的不一致的类实例。IE:

    def __init__(self, max = 0):
        self.n = None
        self.max = max

    def __iter__(self):
        self.n = 0
        return self

此外,self.n通过将其重命名为self._n.

于 2020-05-01T13:44:05.593 回答